我最近发现了消息选择器
@ActivationConfigProperty(
propertyName="messageSelector",
propertyValue="Fragile IS TRUE")
我的问题是:如何在运行时使选择器动态化?
假设消费者决定只想要具有属性“Fragile IS FALSE”的消息。
消费者是否可以在不重新部署MDB的情况下更改选择器?
注意:我正在使用Glassfish v2.1。
我最近发现了消息选择器
@ActivationConfigProperty(
propertyName="messageSelector",
propertyValue="Fragile IS TRUE")
我的问题是:如何在运行时使选择器动态化?
假设消费者决定只想要具有属性“Fragile IS FALSE”的消息。
消费者是否可以在不重新部署MDB的情况下更改选择器?
注意:我正在使用Glassfish v2.1。
JMS(Jakarta Messaging)旨在提供简单的方法来完成简单的事情,以及更复杂的方法来完成不太频繁需要的更复杂的事情。消息驱动的 bean 是第一种情况的一个例子。要进行一些动态重新配置,您需要停止使用 MDB 并开始使用编程 API 来消费消息,使用注入的 JMSContext
和主题或队列。例如:
@Inject
private JMSContext context;
@Resource(lookup="jms/queue/thumbnail")
Queue thumbnailQueue;
JMSConsumer connectListener(String messageSelector) {
JMSConsumer consumer = context.createConsumer(logTopic, messageSelector);
consumer.setMessageListener(message -> {
// process message
});
return consumer;
}
您可以在启动期间调用connectListener
,例如在CDI bean中:
public void start(@Observes @Initialized(ApplicationScoped.class) Object startEvent) {
connectListener("Fragile IS TRUE");
}
然后,您可以通过关闭返回的消费者并使用新的选择器字符串再次创建它来轻松重新配置它:
consumer.close();
consumer = connectListener("Fragile IS FALSE");