Rocketmq--消息发送和接收演示

news/2023/12/10 14:30:17

使用Java代码来演示消息的发送和接收

<dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.0.2</version>
</dependency>

1 发送消息

        消息发送步骤:

  • 创建消息生产者, 指定生产者所属的组名
  • 指定Nameserver地址
  • 启动生产者
  • 创建消息对象,指定主题、标签和消息体
  • 发送消息
  • 关闭生产者
//发送消息
public class RocketMQSendTest {public static void main(String[] args) throws Exception {//1. 创建消息生产者, 指定生产者所属的组名DefaultMQProducer producer = new DefaultMQProducer("myproducer-group");//2. 指定Nameserver地址producer.setNamesrvAddr("192.168.109.131:9876");//3. 启动生产者producer.start();//4. 创建消息对象,指定主题、标签和消息体Message msg = new Message("myTopic", "myTag",("RocketMQ Message").getBytes());//5. 发送消息SendResult sendResult = producer.send(msg,10000);System.out.println(sendResult);//6. 关闭生产者producer.shutdown();}
}

2 接收消息

        消息接收步骤:

  • 创建消息消费者, 指定消费者所属的组名
  • 指定Nameserver地址
  • 指定消费者订阅的主题和标签
  • 设置回调函数,编写处理消息的方法
  • 启动消息消费者
//接收消息
public class RocketMQReceiveTest {public static void main(String[] args) throws MQClientException {//1. 创建消息消费者, 指定消费者所属的组名DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("myconsumer-
group");//2. 指定Nameserver地址consumer.setNamesrvAddr("192.168.109.131:9876");//3. 指定消费者订阅的主题和标签consumer.subscribe("myTopic", "*");//4. 设置回调函数,编写处理消息的方法consumer.registerMessageListener(new MessageListenerConcurrently() {@Overridepublic ConsumeConcurrentlyStatus consumeMessage(List<MessageExt>
msgs,ConsumeConcurrentlyContext
context) {System.out.println("Receive New Messages: " + msgs);//返回消费状态return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;}});//5. 启动消息消费者consumer.start();System.out.println("Consumer Started.");}
}

3 案例

接下来我们模拟一种场景: 下单成功之后,向下单用户发送短信。设计图如下:

3.1  订单微服务发送消息

1 在 shop-order 中添加rocketmq的依赖

<!--rocketmq-->
<dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.0.2</version>
</dependency>
<dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-client</artifactId><version>4.4.0</version>
</dependency>

2 添加配置

rocketmq:
name-server: 192.168.109.131:9876  #rocketMQ服务的地址
producer:group: shop-order # 生产者组

3 编写测试代码

@RestController
@Slf4j
public class OrderController2 {@Autowiredprivate OrderService orderService;@Autowiredprivate ProductService productService;@Autowiredprivate RocketMQTemplate rocketMQTemplate;//准备买1件商品@GetMapping("/order/prod/{pid}")public Order order(@PathVariable("pid") Integer pid) {log.info(">>客户下单,这时候要调用商品微服务查询商品信息");//通过fegin调用商品微服务Product product = productService.findByPid(pid);if (product == null){Order order = new Order();order.setPname("下单失败");return order;}log.info(">>商品信息,查询结果:" + JSON.toJSONString(product));Order order = new Order();order.setUid(1);order.setUsername("测试用户");order.setPid(product.getPid());order.setPname(product.getPname());order.setPprice(product.getPprice());order.setNumber(1);orderService.save(order);//下单成功之后,将消息放到mq中rocketMQTemplate.convertAndSend("order-topic", order);return order;}
}


https://dhexx.cn/news/show-5071623.html

相关文章

Java基础入门·对存储文件File的相关操作

前言 File类获取的方法 getName() | getPath() File getAbsoluteFile() | File getParentFile() long length() File类遍历方法 IO流对象的分类 1.按照操作的文件类型分类 2.按照数据的流向分类 IO流对象的分类归纳 OutputStream 字节输出流写入文件的步骤 追加写入 F…

Linux系统编程6(线程互斥,锁,同步,生产消费模型)

上篇文章介绍完线程的概念后&#xff0c;我们将在这篇文章中初步探讨线程编程以及线程应用中的问题&#xff0c;这篇文章将以抢票系统为例&#xff0c;贯穿整篇文章。笔者将介绍在多线程编程中会出现的问题&#xff0c;什么是同步&#xff1f;什么是互斥&#xff1f;为什么多线…

虚拟化技术:深入浅出

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

react-route的路由

React-Router是一个基于React的强大路由库&#xff0c;它可以帮助我们在React应用中实现页面之间的跳转和路由管理。本文将详细介绍React-Router的路由功能、常用功能模块、路由传参和路由嵌套&#xff0c;并提供相关代码和解释。 路由功能 React-Router通过管理URL和组件的映…

Vue3 ~

变动 实例 const app new Vue({}) Vue.use() Vue.mixin() Vue.component() Vue.directive()const app Vue.createApp({}) app.use() app.mixin() app.component() app.directive()createApp 代替 new Vue 允许多个根标签 createStore 代替 Vue.use(Vuex) createRouter 代替…

以数据为中心的安全市场快速增长

根据Adroit Market Research的数据&#xff0c;2021年全球以数据为中心的安全市场规模估计为27.6亿美元&#xff0c;预计到2030年将增长至393.48亿美元&#xff0c;2021年至2030年的复合年增长率为30.9%。 研究人员表示&#xff0c;以数据为中心的安全强调保护数据本身&#x…

DMNet复现(一)之数据准备篇:Density map guided object detection in aerial image

一、生成密度图 密度图标签生成 采用以下代码&#xff0c;生成训练集密度图gt&#xff1a; import cv2 import glob import h5py import scipy import pickle import numpy as np from PIL import Image from itertools import islice from tqdm import tqdm from matplotli…

【QT5-解决不同分辨率屏幕-进行匹配大小-适应屏幕大小-基础样例】

【QT5-解决不同分辨率屏幕-进行匹配大小-适应屏幕大小】 1、前言2、实验环境3-1、问题说明-屏幕视频3-2、解决方式-个人总结解决思路&#xff1a;我们在软件启动的时候&#xff0c;先获取屏幕大小&#xff0c;然后根据长宽&#xff0c;按照一定比例&#xff0c;重新设置大小。并…

如何下载安装 WampServer 并结合 cpolar 内网穿透,轻松实现对本地服务的公网访问

文章目录 前言1.WampServer下载安装2.WampServer启动3.安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4.固定公网地址访问 前言 Wamp 是一个 Windows系统下的 Apache PHP Mysql 集成安装环境&#xff0c;是一组常用来…

C语言生成随机数、C++11按分布生成随机数学习

C语言生成随机数 如果只要产生随机数而不需要设定范围的话&#xff0c;只要用rand()就可以&#xff1b;rand()会返回一随机数值, 范围在0至RAND_MAX 间&#xff1b;RAND_MAX定义在stdlib.h, 其值为2147483647&#xff1b; 如果想要获取在一定范围内的数的话&#xff0c;直接做…