点击此处---> 群内免费提供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); }
谢谢
杰里
Jerry,你好
可能的解决方案可能是:
1)如果您使用默认计划(我假设)中的EM Servce实例,则队列名称必须包含名称空间,例如。 我/自己的/命名空间/MyQueuename
2)尝试启动连接,例如 在其上设置MessageConsumer和MessageListener之后,请执行connection.start()。
原因是connection.start()调用告诉消息传递提供程序开始传递消息。
您的应用程序必须准备就绪 接收消息。
这意味着必须在开始连接之前设置您的消息使用者。
仅在使用异步MessageCosumers时才会发生此问题。
与Consumer.receive()的同步调用不受此影响。 br>
希望这对您有所帮助,
Adem
谢谢。 你节省了我的时间。
解决方法是在启动连接后,线程休眠一会儿。
或者不关闭会话(仅用于测试)。
一周热门 更多>