Enterprise 高级

Message-Driven Bean 与 Reactive Messaging

用 MicroProfile Reactive Messaging 替代 JMS Message-Driven Bean,实现事件驱动处理。

✕ Java EE
@MessageDriven(activationConfig = {
    @ActivationConfigProperty(
        propertyName = "destinationType",
        propertyValue = "jakarta.jms.Queue"),
    @ActivationConfigProperty(
        propertyName = "destination",
        propertyValue = "java:/jms/OrderQueue")
})
public class OrderMDB implements MessageListener {
    @Override
    public void onMessage(Message message) {
        TextMessage txt = (TextMessage) message;
        processOrder(txt.getText());
    }
}
✓ MicroProfile 4+
@ApplicationScoped
public class OrderProcessor {
    @Incoming("orders")
    public void process(Order order) {
        // automatically deserialized from
        // the "orders" channel
        fulfillOrder(order);
    }
}
发现此代码有问题? 告诉我们。
🪶

最少代码

单个 @Incoming 方法替代 MDB 类、MessageListener 接口和 @ActivationConfigProperty。

🔀

多种消息系统

相同的注解适用于 Kafka、AMQP、内存通道等。

🔗

响应式链

轻松将 @Incoming 与 @Outgoing 链接以进行流处理。

旧方式
Message-Driven Bean
现代方式
Reactive Messaging
自 JDK
11
难度
高级
Message-Driven Bean 与 Reactive Messaging
可用

自 MicroProfile 4.0 / SmallRye Reactive Messaging 起可用

Message-Driven Bean 需要实现 MessageListener,配置 @ActivationConfigProperty 并将所有内容包裹在 EJB 容器中。MicroProfile Reactive Messaging 只需一个 @Incoming 方法注解。

分享 𝕏 🦋 in