【发布时间】:2013-02-02 03:34:33
【问题描述】:
假设 Active MQ 是代理,并且有 6 台服务器连接了 JMS 侦听器。
当一个主题被发送时,所有六台服务器都会消费这些消息。
现在我希望一个特定的服务器只使用消息而不是所有六个使用选择器的消息,并且应该在发送 JMS 之前对其进行过滤。
如何在 JMS 中定义选择器,以便主题将被特定服务器而不是全部使用。
【问题讨论】:
假设 Active MQ 是代理,并且有 6 台服务器连接了 JMS 侦听器。
当一个主题被发送时,所有六台服务器都会消费这些消息。
现在我希望一个特定的服务器只使用消息而不是所有六个使用选择器的消息,并且应该在发送 JMS 之前对其进行过滤。
如何在 JMS 中定义选择器,以便主题将被特定服务器而不是全部使用。
【问题讨论】:
您需要 JMS message selectors。发送前无需过滤,接收时即可。仅 ID 为“serv_5”的服务器接收消息的示例:
制作人:
...
Message message = session.createMessage();
message.setObjectProperty("server_id", "serv_5");
producer.send(message);
消费者(MDB):
@MessageDriven(mappedName="jms/YourQueue", activationConfig = {
@ActivationConfigProperty(propertyName = "acknowledgeMode",
propertyValue = "Auto-acknowledge"),
@ActivationConfigProperty(propertyName = "destinationType",
propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(
propertyName="messageSelector",
propertyValue="server_id = 'serv_5'")
})
public class YourMessageBean implements MessageListener { ..
【讨论】: