使用 Spring 和 activemq 通过 HTTP 请求响应



我正在构建一个简单的REST api,它将Web服务器连接到后端服务,后端服务执行简单的检查并发送响应。

所以客户端(通过HTTP(->到Web服务器(通过ACTIVEMQ/CAMEL(->到Checking-Service,然后再回来。

GET 请求的端点是"/{id}"。我正在尝试使它通过 queue:ws-out 发送一条消息到 queue:cs-in,并将其一直映射回原始 GET 请求。

检查服务 (cs( 代码很好,它只是使用 jmslistener 将 CheckMessage 对象中的一个值更改为 true。

我已经在网上彻底搜索了示例,但无法获得任何工作。我找到的最接近的如下。

这就是我到目前为止在 Web 服务器 (ws( 上所拥有的。

休息控制器

import ...
@RestController
public class RESTController extends Exception{
    @Autowired
    CamelContext camelContext;
    @Autowired
    JmsTemplate jmsTemplate;
    @GetMapping("/{id}")
    public String testCamel(@PathVariable String id) {
        //Object used to send out
        CheckMessage outMsg = new CheckMessage(id);
        //Object used to receive response
        CheckMessage inMsg = new CheckMessage(id);
        //Sending the message out (working)
        jmsTemplate.convertAndSend("ws-out", outMsg);
        //Returning the response to the client (need correlation to the out message"
        return jmsTemplate.receiveSelectedAndConvert("ws-in", ??);
    }
}

ws 上的侦听器

@Service
public class WSListener {
    //For receiving the response from Checking-Service
    @JmsListener(destination = "ws-in")
    public void receiveMessage(CheckMessage response) {
    }
}

谢谢!

  1. 您从"ws-in"接收消息,其中包含 2 个消费者 jmsTemplate.receiveSelectedAndConvert 和 WSListener !! 来自队列的消息由 2 个之一使用。

  2. 您向"WS-out"发送消息并从"WS-IN"使用?? 最后一个队列为空且未收到任何消息,您必须将消息发送到它

您需要一个有效的选择器来检索基于 JMSCorrelationID 的 receiveSelectedAndConvert 的消息,作为您创建的示例或从 rest 请求收到的 id,但您需要将此 ID 添加到消息标头中,如下所示

    this.jmsTemplate.convertAndSend("ws-out", id, new MessageCreator() {
        @Override
        public Message createMessage(Session session) throws JMSException {
            TextMessage tm = session.createTextMessage(new CheckMessage(id));
            tm.setJMSCorrelationID(id);
            return tm;
        }
    });

    return jmsTemplate.receiveSelectedAndConvert("ws-in", "JMSCorrelationID='" + id+ "'");

将邮件从"WS-out"转发到"WS-In">

@Service
public class WSListener {
    //For receiving the response from Checking-Service
    @JmsListener(destination = "ws-out")
    public void receiveMessage(CheckMessage response) {
        jmsTemplate.convertAndSend("ws-in", response);
    }
}

相关内容

  • 没有找到相关文章

最新更新