我开发了一个带有嵌入式activeMQ消息服务器的Java EE应用程序(在GlassFish上)。我可以将消息发送到我的消息驱动Bean。现在,我想通过activeMQ代理将消息发送回另一个主题。
没有消息传递给主题“回答”。我在activeMQ-web-frontend上看到它并没有抛出任何异常。
我没有看到问题。有人可以给我一个我可以搜索的小费吗?
这是我的课程:
@MessageDriven(activationConfig = {
@ActivationConfigProperty(propertyName = "destination", propertyValue = "amqmsg"),
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic") }, mappedName = "amqmsg")
@TransactionManagement(TransactionManagementType.BEAN)
public class TopicMB implements MessageListener {
@Inject
private MessageSender messageSender;
private static final Logger logger = LoggerFactory.getLogger(TopicMB.class);
public void onMessage(Message message) {
messageLogger.log(message);
try {
messageSender.send("antwort");
} catch (Exception e) {
logger.error(e.getLocalizedMessage());
e.printStackTrace();
}
}
}
我的MessageSender。 amqpool为acitveMQ注入连接器连接池。
@Stateless
public class MessageSender {
private static final Logger logger = LoggerFactory
.getLogger(MessageSender.class);
@Resource(name = "amqpool")
private ConnectionFactory connectionFactory;
private static String subject = "answer";
public void send(String text) throws JMSException {
Connection connection = connectionFactory.createConnection();
connection.start();
Session session = connection.createSession(false,
Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createTopic(subject);
MessageProducer producer = session.createProducer(destination);
producer.setDeliveryDelay(DeliveryMode.PERSISTENT);
TextMessage message = session.createTextMessage("antwort");
// Here we are sending the message!
producer.send(message);
session.close();
}
}
答案 0 :(得分:0)
如果在webconsole上看到该消息,则听起来主题上没有消费者。
请注意,主题永远不会存储邮件 - 订阅主题存储邮件。非持久订阅(默认)仅在消费者连接并主动订阅主题时才处于活动状态。持久订阅可以在消费者未连接时保留消息。
那么,在发送消息时,主题上是否有消费者,或主题上是否已注册持久订阅?