使用队列中的消息时,消息侦听器不起作用

2020-08-30 21:00发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家您好,

我正在研究如何使用Java使用企业消息传递服务来消费消息。

我从SAP提供的github存储库中克隆了代码。

https://github.com/SAP/enterprise-messaging-client- java-samples

样本消耗是阻塞呼叫。 而且工作正常。 我刚刚修改了代码以异步接收消息。

但是它不起作用。 队列 Queue_test 中的消息未使用。 您能帮忙看看这个问题吗?

这是代码:

 try(Connection connection = connectionFactory.createConnection();
         会话会话= connection.createSession(false,Session.AUTO_ACKNOWLEDGE)){
     connection.start();
     队列队列= session.createQueue(QUEUE_PREFIX +" Queue_test");
     MessageConsumer消费者= session.createConsumer(queue);
    //consumer.setMessageListener(new MyMessageListener());
     Consumer.setMessageListener(new MessageListener(){//注册一个侦听器以异步接收消息
        
         @Override
         公共无效onMessage(消息){
             log.info("收到消息:" +消息);
             if(TextMessage的消息实例){
                 尝试{
                     TextMessage messageText =(TextMessage)消息;
                     log.info("收到消息:" + messageText.getText());
                    //message.acknowledge();
                 } catch(JMSException e){
                     log.error(e.getMessage(),e);
                 }
             }
         }
     });
 } catch(JMSException e){
     log.error("无法接收消息。",e);
 } 

谢谢

杰里

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家您好,

我正在研究如何使用Java使用企业消息传递服务来消费消息。

我从SAP提供的github存储库中克隆了代码。

https://github.com/SAP/enterprise-messaging-client- java-samples

样本消耗是阻塞呼叫。 而且工作正常。 我刚刚修改了代码以异步接收消息。

但是它不起作用。 队列 Queue_test 中的消息未使用。 您能帮忙看看这个问题吗?

这是代码:

 try(Connection connection = connectionFactory.createConnection();
         会话会话= connection.createSession(false,Session.AUTO_ACKNOWLEDGE)){
     connection.start();
     队列队列= session.createQueue(QUEUE_PREFIX +" Queue_test");
     MessageConsumer消费者= session.createConsumer(queue);
    //consumer.setMessageListener(new MyMessageListener());
     Consumer.setMessageListener(new MessageListener(){//注册一个侦听器以异步接收消息
        
         @Override
         公共无效onMessage(消息){
             log.info("收到消息:" +消息);
             if(TextMessage的消息实例){
                 尝试{
                     TextMessage messageText =(TextMessage)消息;
                     log.info("收到消息:" + messageText.getText());
                    //message.acknowledge();
                 } catch(JMSException e){
                     log.error(e.getMessage(),e);
                 }
             }
         }
     });
 } catch(JMSException e){
     log.error("无法接收消息。",e);
 } 

谢谢

杰里

付费偷看设置
发送
2条回答
SAP砖家
1楼 · 2020-08-30 21:22.采纳回答

Jerry,你好

可能的解决方案可能是:

1)如果您使用默认计划(我假设)中的EM Servce实例,则队列名称必须包含名称空间,例如。 我/自己的/命名空间/MyQueuename

2)尝试启动连接,例如 在其上设置MessageConsumer和MessageListener之后,请执行connection.start()。
原因是connection.start()调用告诉消息传递提供程序开始传递消息。
您的应用程序必须准备就绪 接收消息。
这意味着必须在开始连接之前设置您的消息使用者。
仅在使用异步MessageCosumers时才会发生此问题。
与Consumer.receive()的同步调用不受此影响。 br>

希望这对您有所帮助,
Adem

DafaDDDa
2楼-- · 2020-08-30 21:18

谢谢。 你节省了我的时间。

解决方法是在启动连接后,线程休眠一会儿。

 connection.start();
  Thread.sleep(10000); 

或者不关闭会话(仅用于测试)。

一周热门 更多>