以下发送消息测试基于已经安装并且配置好rocketmq和rocketmq管理平台,导入rocketmq依赖的基础上进行测试发送消息
1.同步发送消息:
- 使用
DefaultMQProducer
类的send
方法进行同步发送消息。在发送消息时,调用send
方法并设置SendCallback
回调对象为null
,即可实现同步发送消息。 - 同步发送消息的代码示例:
-
/** * 创建生产者测试 * @throws InterruptedException * @throws RemotingException * @throws MQClientException * @throws MQBrokerException * @throws UnsupportedEncodingException * @throws UnsupportedEncodingException */ @Test public void sandMessageTest() throws InterruptedException, RemotingException, MQClientException, MQBrokerException, UnsupportedEncodingException, UnsupportedEncodingException { // 创建一个DefaultMQProducer对象,指定生产者组名为"ProducerGroup" DefaultMQProducer producer = new DefaultMQProducer("ProducerGroup"); // 设置NameServer的地址 producer.setNamesrvAddr("127.0.0.1:9876"); // 启动生产者 producer.start(); // 创建一个消息对象,指定主题为"Topic",标签为"Tag",消息关键字为"Key",消息内容为"Hello RocketMQ" Message message = new Message("Topic", "Tag", "Key", "Hello RocketMQ".getBytes()); // 发送消息并等待返回结果 SendResult sendResult = producer.send(message); // 打印发送结果状态 System.out.println("Send Status: " + sendResult.getSendStatus()); // 关闭生产者 producer.shutdown(); }
响应结果:
-
-
2.异步发送消息:
- 使用
DefaultMQProducer
类的send
方法进行异步发送消息,并设置SendCallback
回调对象。在SendCallback
回调对象中处理消息发送结果。 - 异步发送消息的代码示例:
/**
* 创建生产者测试
* @throws InterruptedException
* @throws RemotingException
* @throws MQClientException
*/
@Test
public void sandMessageTest() throws InterruptedException, RemotingException, MQClientException{
// 创建一个DefaultMQProducer对象,指定生产者组名为"ProducerGroup"
DefaultMQProducer producer = new DefaultMQProducer("ProducerGroup3");
// 设置NameServer的地址
producer.setNamesrvAddr("127.0.0.1:9876");
// 启动生产者
producer.start();
// 创建一个消息对象,指定主题为"Topic3",标签为"Tag3",消息关键字为"Key3",消息内容为"Hello RocketMQ3"
Message message = new Message("Topic3", "Tag3", "Key3", "Hello RocketMQ3".getBytes());
// 发送消息并设置异步发送回调
producer.send(message, new SendCallback() {
@Override
public void onSuccess(SendResult sendResult) {
// 异步发送成功时的处理逻辑
System.out.println("Send Status: " + sendResult.getSendStatus());
}
@Override
public void onException(Throwable e) {
// 异步发送异常时的处理逻辑
e.printStackTrace();
}
});
// 等待异步发送结果
Thread.sleep(1000);
// 关闭生产者
producer.shutdown();
}
响应结果:
总结:
同步消息的发送消息方式为 生产者发送一个消息到mq,mq再返回一个完成状态到生产者,接着生产者继续发送一个消息到mq,循环往复直到结束;
异步消息的发送消息方式为 生产者发送一个消息到mq,生产者不需要等待mq返回的完成状态,而是继续发送下一个消息,期间mq也会返回完成状态,循环往复直到结束;
优缺点:
实际开发中,要根据业务特点来使用合适的消息发送方式,像支付业务需要同步处理订单的情况要求保持数据同步一致,就要选用同步消息。而像日志记录这种只需发送无重要业务处理的情况,通常都选用异步消息。
通过以上代码示例,可以实现在RocketMQ中进行同步发送消息和异步发送消息的操作。在实际应用中,可以根据具体的业务需求选择合适的消息发送方式,以满足业务的需求。