我正在构建一个简单的REST api,它将Web服务器连接到后端服务,后端执行简单的检查并发送响应。
所以客户端(通过HTTP) - >到Web服务器(通过ACTIVEMQ / CAMEL) - >检查服务,然后再回来。
GET请求的终端是" / {id}" 。我尝试通过 queue:ws-out 向 queue:cs-in 发送消息,并将其一直映射回原来的GET请求。
Checking-Service( cs )代码很好,它只是使用jmslistener将CheckMessage对象中的值更改为true。
我已经在网上彻底搜索了一些示例,但无法正常工作。我找到的最接近的是following。
这是我到目前为止在Web服务器上的内容( ws )。
RestController
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) {
}
}
谢谢!
答案 0 :(得分:0)
您收到来自" ws-in"的消息与2个消费者jmsTemplate.receiveSelectedAndConvert和WSListener !!来自队列的消息由2中的一个消耗。
您向" ws-out"发送消息并从" ws-in"消费??最后一个队列 是空的,没有收到任何消息,你必须发送消息 它
你需要一个有效的选择器来检索带有基于JMSCorrelationID的receiveSelectedAndConvert作为你所提到的例子或从其余请求收到的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);
}
}