如何将业务逻辑与 JMS 侦听器分离?

How to separate business logic from JMS listener?

我正在编写 JmsAdapter,其中 2 个名为 sendMessage 的方法用于在 spring 启动时发送消息和 receiveMessage 用于接收消息,我有一个服务 class EventService 使用此 JmsAdapter 发送消息。现在我很困惑如何处理在 JMSAdapter 中收到的消息,因为我不想在侦听器 receiveMessage 方法中放置任何业务逻辑(例如数据库调用、消息处理)。我这样做是为了将业务逻辑与 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 ;
}

我需要用不同的方式思考吗?还有哪些其他选择?因为会循环依赖Adapter和Service。

我认为理想的方法是将发送和接收消息的责任分开。 class 承担不止一项责任往往会造成此类混乱。 如果您对使用 EJB 没有保留意见,那么可以使用消息驱动 Bean 来侦听传入的消息。 如果不是通过 EJB,那么您应该有一个单独的 class,它负责侦听来自该特定队列的消息并处理该消息。为了进一步分离责任,您可以从侦听器调用在 POJO 中实现的方法(这具有所有业务逻辑)。