发布者将消息发布到不同的目的地。我的客户需要一个接一个地订阅并获取这些目的地中的所有消息。我想要使用来自多个主题的消息。此外,我希望在按钮操作中接收主题消息(不同的目的地),而不是使用消息监听器。有人可以帮忙吗? 我的部分代码是。
MessageConsumer consumer = null;
if (isDurableSubscription) {
// the subscription Name assigned to a durable subscription must be unique within a given client ID.
consumer = session.createDurableSubscriber( topic, subscriptionName );
} else {
consumer = session.createConsumer( topic );
}
log.finest("consumer = " + consumer );
consumer.setMessageListener( this );
conn.start();
}
public void onMessage(Message message) {
if ( message instanceof TextMessage ) {
try {
TextMessage txtMessage = (TextMessage) message;
String text = txtMessage.getText();
this.msg = text;
System.out.println(text);
log.finest("Message processed ...");
session.commit();
}
答案 0 :(得分:1)
此外,我想要主题消息(不同的目的地) 在按钮操作中收到,而不是使用Message Listener。
JMS提供程序的重点是监听生产者发布的消息,并具有异步通信通道,生产者和侦听器在该通道中解耦。当你说你想在按钮动作中接收消息时,它相当于说“当发布者制作消息时我真的不在乎,但是当我感觉到时我会听” - 这不适合使用一个JMS。可能是您有消息的队列,并根据某些用户操作一个接一个地选择。
发布者不会将消息标记为已发送(基于您的配置方式),直到客户端确认消息并且在您的情况下(即使可能),可能需要很长时间并且消息可能会过期。使用JMS实现此目的的一种方法是使用内部数据结构来保存所有消息(在使用侦听器从主题中提取它们之后),然后在按钮操作上处理它。但是,您将失去JMS提供程序的所有好处(持久性,在客户端关闭时丢失消息等)。