📅  最后修改于: 2023-12-03 15:02:08.360000             🧑  作者: Mango
在 JMS 中,有两种主要的消息传递模型:Point-to-Point(点对点)和发布订阅(Pub-Sub)。
Point-to-Point 模型适合于一对一的消息传递。在此模型中,一个消息发送者发送一条消息到一个消息队列中。一个消息接收者从相同队列中接收消息,并负责处理该消息。在 Point-to-Point 模型中,消息只会被一个消息接收者接收并处理,而且消息接收者只能按照消息在队列中的顺序接收消息。
Point-to-Point 模型的主要特点包括:
下面是 Java Spring Boot 实现 Point-to-Point 模型的示例代码:
@Component
public class MessageSender {
@Autowired
private JmsTemplate jmsTemplate;
@Value("${jms.queue-name}")
private String queueName;
public void sendMessage(String message) {
jmsTemplate.send(queueName, new MessageCreator() {
@Override
public Message createMessage(Session session) throws JMSException {
return session.createTextMessage(message);
}
});
}
}
@Component
public class MessageReceiver implements MessageListener {
@Autowired
private ObjectMapper objectMapper;
@Override
public void onMessage(Message message) {
try {
String messageBody = ((TextMessage) message).getText();
MessagePayload payload = objectMapper.readValue(messageBody, MessagePayload.class);
// process the payload
} catch (JMSException | IOException e) {
e.printStackTrace();
}
}
}
与 Point-to-Point 模型相反,发布订阅模型适合于一对多的消息传递。在此模型中,一个消息发送者发送一条消息到一个 Topic(主题)中。多个消息接收者从相同 Topic 中接收消息,并都可以处理该消息。在发布订阅模型中,消息可以被多个接收者接收并处理,而且消息接收者可以异步地接收消息。
发布订阅模型的主要特点包括:
下面是 Java Spring Boot 实现发布订阅模型的示例代码:
@Component
public class MessagePublisher {
@Autowired
private JmsTemplate jmsTemplate;
@Value("${jms.topic-name}")
private String topicName;
public void publishMessage(String message) {
jmsTemplate.send(topicName, new MessageCreator() {
@Override
public Message createMessage(Session session) throws JMSException {
return session.createTextMessage(message);
}
});
}
}
@Component
public class MessageSubscriber implements MessageListener {
@Autowired
private ObjectMapper objectMapper;
@Override
public void onMessage(Message message) {
try {
String messageBody = ((TextMessage) message).getText();
MessagePayload payload = objectMapper.readValue(messageBody, MessagePayload.class);
// process the payload
} catch (JMSException | IOException e) {
e.printStackTrace();
}
}
}
Point-to-Point 和发布订阅模型都是非常常见的消息传递模型,它们分别适合于一对一和一对多的消息传递场景。开发者需要通过分析业务需求来选择合适的模型,以实现高效的消息传递。