我正在编写JmsAdapter,其中2个名为sendMessage
的方法用于发送消息& receiveMessage
用于在spring boot中接收消息,我有一个服务类EventService
,它使用此JmsAdapter发送消息。现在我很困惑如何在JMSAdapter中收到消息,因为我不想在侦听器receiveMessage
方法中放置任何业务逻辑(例如db调用,消息处理)。我这样做是为了将业务逻辑与JMS适配器分开这里是JMSAdapter的代码 -
public class JmsAdapter {
@Autowired
private JmsTemplate jmsTemplate;
public void sendMessage(final String jsonMessage) throws JMSException {
System.out.println("Sending message = " + jsonMessage);
//TODO replace the queue name based from DB
jmsTemplate.convertAndSend("sender", jsonMessage);
System.out.println("Message Sent");
}
@JmsListener(destination = "${receiver}")
public String receiveMessage(final Message jsonMessage) throws JMSException {
System.out.println("Received message " + jsonMessage);
String response = null;
if(jsonMessage instanceof TextMessage) {
TextMessage textMessage = (TextMessage)jsonMessage;
response = textMessage.getText();
System.out.println("Message Received = "+response );
}
return response ;
}
我需要以不同的方式思考。还有哪些其他选择?因为适配器和服务会存在循环依赖。
答案 0 :(得分:0)
我认为理想的方法是分离发送和接收消息的责任。具有一种以上责任的班级往往会产生这种混淆。 如果您对使用EJB没有保留意见,则可以使用消息驱动Bean来侦听传入的消息。 如果不是通过EJB那么你应该有一个单独的类,它负责监听来自这个特定队列的消息并处理消息。为了进一步分离责任,您可以从侦听器调用POJO中实现的方法(这包含所有业务逻辑)。