我对Java EE环境中的编程很新,所以这个问题可能听起来很业余,但这里有:
我正在编写一个简单的JMS应用程序用于演示目的。必须实现的功能之一是在以动态方式设置消息选择器之后从主题获取消息的能力,提示用户必须能够设置某些属性以确定他是否收到消息。消息是从与接收消息的应用程序在同一本地服务器上运行的其他应用程序发送的。
因此,我在发送方和接收方都使用注入的JMSContext组件来处理消息本身。
以下是发送
的功能@Inject
@JMSConnectionFactory("jms/myConnectionFactory")
JMSContext context;
@Resource(lookup = "jms/myTopic")
private Topic topic;
//some more code
public void produceTopicForCreate(Object obj) {
ObjectMessage message = contextCreate.createObjectMessage(obj);
try {
//setting properties
} catch (JMSException ex) {
//logging
}
context.createProducer().send(topic, message)
}
在接收方
@Inject
@JMSConnectionFactory("jms/myConnectionFactory")
private JMSContext context;
@Resource(lookup = "jms/myTopic")
private Topic topic
private JMSConsumer consumer;
private List<MyClass> listOfMessages;
//more code
public void subscribe(String selector) {
this.consumer = this.context.createDurableConsumer(topic, "durableClient", selector, false);
}
public void receiveMessage() {
try {
this.listOfMessages.add(this.consumer.receiveBody(MyClass.class));
} catch (Exception e) {
//logging
}
}
因此,正如您所看到的,我创建了一个持久消费者来使用来自该主题的消息。现在,每当我在向主题发送消息后尝试调用receiveMessage方法时,我都会得到一个例外,声明&#34; Producer已关闭&#34;。我看着网上,但没有发现问题是什么。
如果这里的任何人都能以任何方式提供帮助,我将不胜感激!提前致谢!
一些重要细节: