OpenLiberty / open-liberty

Open Liberty is a highly composable, fast to start, dynamic application server runtime environment
https://openliberty.io
Eclipse Public License 2.0
1.14k stars 582 forks source link

MicroProfile Reactive Messaging 3.0 Support #19889

Closed Emily-Jiang closed 3 months ago

Emily-Jiang commented 2 years ago

Description

The current MicroProfile Reactive Messaging 1.0 does not work with MicroProfile 4.x. Customers that use RM 1.0 are stuck. Quite a few customers asked about when RM 2.0 will be supported in Open Liberty many times (I was asked at JChampion conference 2022 on Friday 21st Jan 2022).

We should directly support the recent release of RM 3.0 (Jakarta EE 9.1 alignment) to make it work with Jakarta EE 10 and MP 6.0.


Documents

When available, add links to required feature documents. Use "N/A" to mark particular documents which are not required by the feature.

General Instructions

The process steps occur roughly in the order as presented. Process steps occasionally overlap.

Each process step has a number of tasks which must be completed or must be marked as not applicable ("N/A").

Unless otherwise indicated, the tasks are the responsibility of the Feature Owner or a Delegate of the Feature Owner.

If you need assistance, reach out to the OpenLiberty/release-architect.

Important: Labels are used to trigger particular steps and must be added as indicated.


Prioritization (Complete Before Development Starts)

The (OpenLiberty/chief-architect) and area leads are responsible for prioritizing the features and determining which features are being actively worked on.

Prioritization

Design preliminaries determine whether a formal design, which will be provided by an Upcoming Feature Overview (UFO) document, must be created and reviewed. A formal design is required if the feature requires any of the following: UI, Serviceability, SVT, Performance testing, or non-trivial documentation/ID.

Design Preliminaries

Design

No Design

FAT Documentation

A feature must be prioritized before any implementation work may begin to be delivered (inaccessible/no-ship). However, a design focused approach should still be applied to features, and developers should think about the feature design prior to writing and delivering any code.
Besides being prioritized, a feature must also be socialized (or No Design Approved) before any beta code may be delivered. All new Liberty content must be inaccessible in our GA releases until it is Feature Complete by either marking it kind=noship or beta fencing it.
Code may not GA until this feature has obtained the "Design Approved" or "No Design Approved" label, along with all other tasks outlined in the GA section.

Feature Development Begins

Legal and Translation

In order to avoid last minute blockers and significant disruptions to the feature, the legal items need to be done as early in the feature process as possible, either in design or as early into the development as possible. Similarly, translation is to be done concurrently with development. Both MUST be completed before Beta or GA is requested.

Legal (Complete before Feature Complete Date)

Translation (Complete 1 week before Feature Complete Date)

Innovation (Complete 1 week before Feature Complete Date)

In order to facilitate early feedback from users, all new features and functionality should first be released as part of a beta release.

Beta Code

Beta Blog (Complete 1.5 weeks before beta eGA)

A feature is ready to GA after it is Feature Complete and has obtained all necessary Focal Point Approvals.

Feature Complete

Focal Point Approvals (Complete by Feature Complete Date)

These occur only after GA of this feature is requested (by adding a target:ga label). GA of this feature may not occur until all approvals are obtained.

All Features

Design Approved Features

Remove Beta Fencing (Complete by Feature Complete Date)

GA Blog (Complete by Feature Complete Date)

Post GA

inad9300 commented 2 years ago

It's great to see this in the pipeline. Any estimation on when it will be available? What's the recommended solution in the meantime?

Emily-Jiang commented 2 years ago

We constantly revisit our features in the pipeline. For this feature, it is not high up in the pipeline as yet at the moment, due to resource constraints. Do you currently use MicroProfile reactive messaging 1.0 in the production? Unfortunately, the workaround is to stay with the older version of MicroProfile release if you want to use MicroProfile Reactive Message together with other MicroProfile features.

inad9300 commented 2 years ago

Thanks for your prompt answer. We are not currently using this feature in production, but rather performing an evaluation of technologies for a new project. Unfortunately, I don't think it makes sense to begin a new project using MicroProfile 3.x, being two major versions behind now. Is there any other known workaround? For example, could we modify our pom.xml and depend directly on microprofile-reactive-messaging-api and smallrye-reactive-messaging-provider, or do you foresee any big issues with such an approach?

jhanders34 commented 10 months ago

My notes from the UFO socialization that was done on September 8:

Java APIs / SPIs (page 17)

Emitter and @Channel (page 19)

Emitter and Channel Usage (page 21)

Backpressure Strategy (page 24)

Negative Acknowledgment (Nack) (page 28)

Admin / Config / Command Line (page 40)

Automated Testing (page 46)

Platform / cloud considerations (page 49)

Serviceability (page 52)

NottyCode commented 9 months ago

Slide 23 indicates a strategy of BUFFER has a limit, but the Javadoc from the screenshot indicates that all messages are buffered, which makes UNBOUNDED_BUFFER and BUFFER seem identical. This is perhaps a Javadoc bug from upstream?

How does this feature handle changes to the configuration?

In what way does the configuration processing of this feature block the possibility of InstantOn working?

abutch3r commented 9 months ago

@NottyCode

The upstream Javadoc short descriptions as seen on slide 23 are the issue here. When looking at the full definitions in the javadoc it does cover the differences between the two. image

The feature does not support changes to its configuration once the application has started for either Reactive Messaging or our Connector. All Configuration is read on App Start.

As the configuration is read only once on App start, changes, which we do highly expect there to be, especially details for connecting to kafka. Then currently the afterApp option currently does cause the app to fail to checkpoint. Deferring the processing of the configuration to after app restore is currently being investigated. The Smallrye implementation passes the connector config to the liberty-kafka connector, so if the implementation startup is deferred, then the connector will be as well.

Azquelt commented 8 months ago

There are a couple of problems that have arisen during development which are going to require changes in the design:

I will update the UFO with these changes. Since it's already been reviewed once, I will mark the changed slides as NEW and keep the original side at the end of the presentation marked as OLD.

Azquelt commented 8 months ago

@NottyCode I've updated the UFO with the changes in the comment above. The new/updated slides are 8, 11, 12, 43-45 and 61 (going by the slide numbers in the corners which doesn't match the box preview numbering because the presentation has hidden slides)

jwalcorn commented 7 months ago

Any updated outlook on this one? It had been targeted for 23.0.0.12, but I see that target got removed recently. Has this slipped out to 2024? I tend to only move to the LTS releases, so maybe 24.0.0.3? And I assume this will require the big package change from javax.* to jakarta.*?

tevans78 commented 7 months ago

@jwalcorn Yes, we are now targeting 24.0.0.1 and yes it will be jakarta.* based (compatible with MP 5.0, 6.0 and 6.1).

Emily-Jiang commented 7 months ago

2nd UFO review comments: Slide 40

  1. Remove the server.xml configuration for ContextService for the property context.service
  2. Update the slides to mention the connector config and channel config. For connector config, specify the full name or clarify the naming convention for the connector config.
  3. Specify the priority order if both configs are present.
  4. Specify that the config will be ignored for a channel that does not support async.
Azquelt commented 7 months ago

Point 4 above is not correct. A connector will receive all the config options that the user passes to it. It's up to individual connectors to decide how to handle properties they don't understand.

Update: We discussed this and will update the slides so that it's clear that the context.service option only applies to the liberty-kafka connector.

abutch3r commented 5 months ago

@OpenLiberty/ste-approvers STE education is available at https://ibm.ent.box.com/file/1412639185359 please can you review the document and provide any feed

abutch3r commented 5 months ago
tngiang73 commented 5 months ago

@abutch3r : WASWIN L2 is good with STE slides. Thanks!

abutch3r commented 5 months ago

@OpenLiberty/demo-approvers Demo scheduled for EOI 24.03