2013-02-17 87 views
1

假设活动MQ是代理,并且有6个服务器连接了JMS侦听器。如何在发送JMS消息或发送到特定服务器之前按消息类型过滤?

当一个主题发送时,所有六台服务器都会使用这些消息。

现在我想要一个特定的服务器只使用消息而不是所有六个使用选择器,它应该在发送JMS之前过滤。

如何在JMS中定义选择器,以便主题将被特定服务器而不是全部使用。

回答

2

您需要JMS message selectors。在发送之前不需要过滤,但是在收到之后。

制片::

... 
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 { .. 
其中只有ID为 “serv_5” 服务器接收到该消息的一个例子