【问题标题】:synchronous activemq webservice同步activemq webservice
【发布时间】:2015-09-21 12:37:39
【问题描述】:
我有一个通过 ActiveMQ 发送消息的 Web 服务(Restful),并通过在同一请求中创建一个临时侦听器来同步接收响应。
问题是,监听器等待同步进程的响应,但永远不会死。我需要那个监听器接收响应,并在响应 web 服务请求后立即停止监听器。
我有一个很大的问题,因为对于 Web 服务的每个请求,都会创建一个侦听器,并且该侦听器处于活动状态,从而产生开销。
【问题讨论】:
标签:
web-services
jakarta-ee
activemq
sync
【解决方案1】:
链接中的代码不是生产级代码 - 只是一个如何做出“hello world”请求回复的示例。
这里有一些伪代码来处理消费响应阻塞 - 并在之后关闭消费者。
MessageConsumer responseConsumer = session.createConsumer(tempDest);
Messages response = responseConsumer.receive(waitTimeout);
// TODO handle msg
responseConsumer.close();
无论如何,JMS 中的临时目标都非常慢。您可以改为使用 JMSCorrelationID 并将回复转到由单个消费者处理的所有回复的“常规队列”。这样,您需要一些线程处理代码来将消息传递给 Web 服务线程,但这将是非阻塞的并且非常快。