Message-Driven Bean vs. Reactive Messaging
Замените JMS Message-Driven Beans на MicroProfile Reactive Messaging для более простой обработки событий.
@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());
}
}
@ApplicationScoped
public class OrderProcessor {
@Incoming("orders")
public void process(Order order) {
// automatically deserialized from
// the "orders" channel
fulfillOrder(order);
}
}
Минимальный код
Один метод с @Incoming заменяет класс MDB, интерфейс MessageListener и конфигурацию активации.
Независимость от брокера
Меняйте коннекторы Kafka, AMQP или JMS через конфигурацию, не изменяя код приложения.
Подходит для облачных подходов
Противодавление реактивных потоков и облегчённая среда выполнения делают его идеальным для контейнеризированных развёртываний.
Доступно начиная с MicroProfile 4.0 / SmallRye Reactive Messaging
Message-Driven Beans требуют реализации MessageListener, настройки свойств активации и ручной десериализации JMS-сообщений. MicroProfile Reactive Messaging использует простую аннотацию @Incoming на методе, который получает типизированные объекты напрямую. Конфигурация каналов выносится наружу, делая код независимым от брокера и значительно упрощая тестирование.