在glassfish中的嵌入式activeMQ消息服务器上发送消息

时间:2014-08-22 11:50:29

标签: glassfish ejb jms activemq

我开发了一个带有嵌入式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();

    }

}

1 个答案:

答案 0 :(得分:0)

如果在webconsole上看到该消息,则听起来主题上没有消费者。

请注意,主题永远不会存储邮件 - 订阅主题存储邮件。非持久订阅(默认)仅在消费者连接并主动订阅主题时才处于活动状态。持久订阅可以在消费者未连接时保留消息。

那么,在发送消息时,主题上是否有消费者,或主题上是否已注册持久订阅?