【问题标题】:JMS - message listener onMessage has to be implemented twice?JMS - 消息监听器 onMessage 必须实现两次?
【发布时间】:2017-08-16 12:50:54
【问题描述】:

我尝试使用 activemq 添加消息侦听器。我遇到的所有示例都使用嵌套的 onMessages。正如我发现的那样,Java eclipse 不允许这样做(也在 stackoverflow 上)。所以现在我很困惑如何设置它。当我从监听器中删除 onMessage 时,Eclipse 告诉我必须在那里实现它。此外,它还希望我在类中实现 onMessage 方法。所以我在监听器对象和类中有 onMessage 。我该如何正确处理?我没有看到我的代码中有一个 onMessage 的解决方案。

编辑:代码运行没有错误并接收消息。有两个 onMessages 还是很奇怪

public static class HelloWorldConsumer implements Runnable, MessageListener {

        @Override
        public void run() {
            // TODO Auto-generated method stub




            // Create a Connection
            try {

                ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_BROKER_URL);
                Connection connection = connectionFactory.createConnection();
                connection.start();
                Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
                Topic topic = session.createTopic("Physical");
                MessageConsumer consumer = session.createConsumer(topic);


                MessageListener listner = new MessageListener() {
                    @Override
                    public void onMessage(Message message) {
                        try {
                            if (message instanceof TextMessage) {
                                TextMessage textMessage = (TextMessage) message;
                                System.out.println("Received message : "
                                        + textMessage.getText() + "'");
                            }
                        } catch (JMSException e) {
                            System.out.println("Caught:" + e);
                        }
                    }
                };
                consumer.setMessageListener(listner);
                try {
                    System.in.read();
                } catch (IOException e) {
                }
                connection.close();
            } catch (JMSException ex) {
                // Logger.getLogger(Consumer.class.getName()).log(Level.SEVERE, null, ex);

            }
        }//end method

        @Override
        public void onMessage(Message arg0) {
            // TODO Auto-generated method stub







        }

    }}  

【问题讨论】:

    标签: java jms publish subscribe


    【解决方案1】:

    由于您将 MessageListener 创建为内联匿名类,因此 HelloWorldConsumer 类不需要实现 MessageListener。

    【讨论】:

    • 啊,所以我只是删除“实现 MessageListener 并删除最后的空 onMessage?
    • 是的,按照您的编码方式,您不需要实现 MessageListener
    猜你喜欢
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-16
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    相关资源
    最近更新 更多