五分钟带你玩转rocketMQ(四)消息发送的两种方法

简介: 五分钟带你玩转rocketMQ(四)消息发送的两种方法


一.同步发送

1. @RequestMapping("/send")
2. public void send() throws MQClientException, RemotingException, MQBrokerException, InterruptedException {
3. for (int i = 0; i < 100; i++) {
4. final int index = i;
5. String msg = "demo msg test";
6.             logger.info("开始发送消息:" + msg);
7. Message sendMsg = new Message("DemoTopic", "DemoTag", msg.getBytes());
8. //默认3秒超时
9. SendResult sendResult = defaultMQProducer.send(sendMsg);
10.             logger.info("消息发送响应信息:" + sendResult.toString() + "当前为第" + i + "次");
11.         }
12.     }

二.异步发送

如果对响应时间有要求(要求程序不阻塞),可以异步调用

配置类代码不变 在调用时改变方法即可

1. package cn.baocl.rocketmq.controllor;
2. 
3. import cn.baocl.rocketmq.entity.TestVo;
4. import com.alibaba.rocketmq.client.exception.MQBrokerException;
5. import com.alibaba.rocketmq.client.exception.MQClientException;
6. import com.alibaba.rocketmq.client.producer.DefaultMQProducer;
7. import com.alibaba.rocketmq.client.producer.SendCallback;
8. import com.alibaba.rocketmq.client.producer.SendResult;
9. import com.alibaba.rocketmq.common.message.Message;
10. import com.alibaba.rocketmq.remoting.exception.RemotingException;
11. import org.slf4j.Logger;
12. import org.slf4j.LoggerFactory;
13. import org.springframework.beans.factory.annotation.Autowired;
14. import org.springframework.web.bind.annotation.RequestMapping;
15. import org.springframework.web.bind.annotation.RestController;
16. 
17. 
18. @RestController
19. @RequestMapping("/test")
20. public class TestControllor {
21. private static final Logger logger = LoggerFactory.getLogger(TestControllor.class);
22. 
23. /**
24.      * 使用RocketMq的生产者
25.      */
26. @Autowired
27. private DefaultMQProducer defaultMQProducer;
28. 
29. @RequestMapping("/send")
30. public void send() throws MQClientException, RemotingException, MQBrokerException, InterruptedException {
31. for (int i = 0; i < 100; i++) {
32. final int index = i;
33. String msg = "demo msg test";
34.             logger.info("开始发送消息:" + msg);
35. Message sendMsg = new Message("DemoTopic", "DemoTag", msg.getBytes());
36. //异步传输方法
37.             defaultMQProducer.send(sendMsg, new SendCallback() {
38. @Override
39. public void onSuccess(SendResult sendResult) {
40.                     System.out.printf("%-10d OK %s %n", index,
41.                             sendResult.getMsgId());
42.                 }
43. @Override
44. public void onException(Throwable e) {
45.                     System.out.printf("%-10d Exception %s %n", index, e);
46.                     e.printStackTrace();
47.                 }
48.             });
49.         }
50.     }
51. }

三.单向传输

单向传输用于需要中等可靠性的情况(只发送,不调用回调 直接返回),例如日志收集。

1. public void send() throws MQClientException, RemotingException, MQBrokerException, InterruptedException {
2. for (int i = 0; i < 100; i++) {
3. final int index = i;
4. String msg = "demo msg test";
5.             logger.info("开始发送消息:" + msg);
6. //单项调用
7. Message sendMsg = new Message("DemoTopic", "DemoTag", msg.getBytes());
8. //默认3秒超时
9.             defaultMQProducer.sendOneway(sendMsg);
10.         }
11.     }


相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
消息中间件 存储 负载均衡
一文读懂RocketMQ的高可用机制——消息发送高可用
一文读懂RocketMQ的高可用机制——消息发送高可用
370 1
|
3月前
|
存储 Ubuntu 安全
在Ubuntu 16.04上安装和保护Mosquitto MQTT消息代理的方法
在Ubuntu 16.04上安装和保护Mosquitto MQTT消息代理的方法
100 1
|
3月前
|
消息中间件 存储 Ubuntu
简单记录一下常规安装 RabbitMQ 的方法步骤
这篇文章详细介绍了在本地环境下安装和配置RabbitMQ消息队列的过程,包括RabbitMQ的基本概念、安装步骤、不同模式的特点以及在Linux和Windows系统下的安装方法。
48 0
|
6月前
MQTT的心跳保活机制是通过`setKeepAliveInterval()`方法设置的
MQTT的心跳保活机制是通过`setKeepAliveInterval()`方法设置的
976 2
|
消息中间件
RabbitMQ如何确保消息发送,消息接收
RabbitMQ如何确保消息发送,消息接收
79 0
|
消息中间件 存储
RabbitMQ如何保证消息发送成功
RabbitMQ如何保证消息发送成功
137 0
RabbitMQ如何保证消息发送成功
|
消息中间件 数据可视化 API
RocketMQ极简入门-RocketMQ普通消息发送
RocketMQ已经写了两章了,一章是RocketMQ认识和安装,一章是RocketMQ的工作流程和核心概念,本章我们开始使用RocketMQ来发送和接收消息。RocketMQ的消息种类非常多,比如:普通消息,顺序消息,延迟消息,批量发送,消息过滤等等。本篇文章来探讨一下 普通消息的发送
233 1
|
消息中间件 存储 Java
Spring Boot 中的 RabbitMQ 消息发送配置
Spring Boot 中的 RabbitMQ 消息发送配置
|
消息中间件 存储 中间件
消息中间件-RocketMQ入门 消息发送的三种方式
消息中间件-RocketMQ入门 消息发送的三种方式
171 0
|
消息中间件 RocketMQ
RocketMQ极简入门-RocketMQ顺序消息发送
在某些业务场景下是需要消息按照顺序进行消费,比如一个账户的加钱,减钱的动作必须按照时间先后去执行,否则就会发生金额不够导致操作失败。 顺序消息故名知意就是消息按照发送的顺序进行消费,队列本身是一种先进先出的数据结构,而RocketMQ理论上说也遵循这种机制。但是默认生产者以Round Robin轮询方式把消息发送到不同的Queue分区队列;消费者从多个队列中消费消息,这种情况没法保证顺序。所以在RocketMQ中如何保证消息顺序呢?
119 0