springBoot--集成RocketMQ
1、导入依赖
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>spring-boot-starter-rocketmq</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
<!-- rocketmq dependencies -->
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>4.4.0</version>
</dependency>
2、配置生产者
package com.example.demo.mq; import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.springframework.stereotype.Component; @Component
public class MyProducer {
/**
* 生产组,生产者必须在生产组内
*/
private String producerGroup = "newTest_group"; /**
* nameSrv IP及端口
*/
private String nameSrv = "****:9876"; /**
* 生产者
*/
private DefaultMQProducer producer; /**
* 设置producer对应的组及namesrv信息,并启动producer
*/
public MyProducer(){
producer = new DefaultMQProducer(producerGroup);
producer.setNamesrvAddr(nameSrv);
start();
} /**
* 获取producer
* @return
*/
public DefaultMQProducer getProducer(){
return producer;
} /**
* 对象在使用之前必须调用一次,并且只能初始化一次
*/
public void start(){
try{
this.producer.start();
}catch (MQClientException e){
e.printStackTrace();
}
} /**
* 一般在应用上下文,使用上下文监听器,进行关闭
*/
public void shutdown(){
producer.shutdown();;
}
}
3、发送消息Controller
package com.example.demo.controller; import com.example.demo.mq.MyProducer;
import org.apache.rocketmq.client.exception.MQBrokerException;
import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.remoting.exception.RemotingException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController; import java.util.HashMap; @RestController
public class MQController {
@Autowired
private MyProducer producer;
/**
* topic
*/
private static final String topic = "my_topic_test01"; @GetMapping(value = "/mq/test1")
public Object test1(String text) throws InterruptedException, RemotingException, MQClientException, MQBrokerException {
/**
* message构造函数,三个参数分别为 主题、二级分类、消息内容(需要转换为字节数组)
*/
Message message = new Message(topic,"lcl",("hello RocketMQ"+text).getBytes()); SendResult result = producer.getProducer().send(message); System.out.println(result); return new HashMap<>();
}
}
4、客户端
package com.example2.demo2.mq; import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;
import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.common.consumer.ConsumeFromWhere;
import org.apache.rocketmq.common.message.Message;
import org.springframework.stereotype.Component; @Component
public class MyConsumer {
/**
* 生产组,生产者必须在生产组内
*/
private String producerGroup = "newTest_group"; /**
* nameSrv IP及端口
*/
private String nameSrv = "118.190.215.76:9876"; /**
* topic
*/
private static final String topic = "my_topic_test01"; private DefaultMQPushConsumer consumer; public MyConsumer() throws MQClientException {
consumer = new DefaultMQPushConsumer(producerGroup);
consumer.setNamesrvAddr(nameSrv);
consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_LAST_OFFSET);
consumer.subscribe(topic,"*");
consumer.registerMessageListener((MessageListenerConcurrently) (msgs, context)->{
try{
Message message = msgs.get(0);
System.out.println("%s Receive New Messages: %s %n" + Thread.currentThread().getName() + new String(msgs.get(0).getBody()));
String topic = message.getTopic();
String body = new String(message.getBody(),"utf-8");
String tags = message.getTags();
String keys = message.getKeys();
System.out.println("topic="+ topic +",tags="+tags+",keys="+keys+",body="+body);
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}catch(Exception e){
e.printStackTrace();
return ConsumeConcurrentlyStatus.RECONSUME_LATER;
}
});
consumer.start();
}
}
5、测试


注意:一定要创建topic,创建topic可以通过控制台创建、可以通过linux命令进行创建,也可以通过程序自动创建,无论以哪种方式创建,都需要创建topic,否则会报错。
springBoot--集成RocketMQ的更多相关文章
- SpringBoot - 集成RocketMQ实现延迟消息队列
目录 前言 环境 具体实现 前言 RocketMQ是阿里巴巴在2012年开源的分布式消息中间件,记录下SpringBoot整合RocketMQ的方式,RocketMQ的安装可以查看:Windows下安 ...
- SpringBoot集成RocketMQ
实战,用案例来说话 前面已经说了JMS和RocketMQ一些概念和安装,下面使用SpringBoot来亲身操作一下. 生产者的操作 SpringBoot项目创建完成,引入依赖是第一步: <dep ...
- springboot之RocketMq实现
环境:win10 1.下载安装包 http://mirrors.tuna.tsinghua.edu.cn/apache/rocketmq/4.4.0/rocketmq-all-4.4.0-bin-re ...
- 【springBoot】springBoot集成redis的key,value序列化的相关问题
使用的是maven工程 springBoot集成redis默认使用的是注解,在官方文档中只需要2步; 1.在pom文件中引入即可 <dependency> <groupId>o ...
- SpringBoot集成security
本文就SpringBoot集成Security的使用步骤做出解释说明.
- springboot集成Actuator
Actuator监控端点,主要用来监控与管理. 原生端点主要分为三大类:应用配置类.度量指标类.操作控制类. 应用配置类:获取应用程序中加载的配置.环境变量.自动化配置报告等与SpringBoot应用 ...
- SpringBoot集成Shiro并用MongoDB做Session存储
之前项目鉴权一直使用的Shiro,那是在Spring MVC里面使用的比较多,而且都是用XML来配置,用Shiro来做权限控制相对比较简单而且成熟,而且我一直都把Shiro的session放在mong ...
- SpringBoot集成redis的key,value序列化的相关问题
使用的是maven工程 springBoot集成redis默认使用的是注解,在官方文档中只需要2步; 1.在pom文件中引入即可 <dependency> <groupId>o ...
- springboot集成mybatis(二)
上篇文章<springboot集成mybatis(一)>介绍了SpringBoot集成MyBatis注解版.本文还是使用上篇中的案例,咱们换个姿势来一遍^_^ 二.MyBatis配置版(X ...
- springboot集成mybatis(一)
MyBatis简介 MyBatis本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation迁移到了google code,并且改名为MyB ...
随机推荐
- ES6-函数与数组命名
1 箭头函数 1.1 以往js function 名字(){ 其他语句 } 1.2 现在ES6 修正了一些this,以前this可以变 ()=>{ 其他语句 } 如果只有一个参数,()可以省 . ...
- JAVASE(七)面向对象:封装性(特性之一)、构造器、属性、关键字
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.封装性 1.为什么要使用封装性? 创建对象以后,可以通过对象.属性名的方法进行赋值.只能限制数据的类 ...
- Java实现 LeetCode 778 水位上升的泳池中游泳(二分+DFS)
778. 水位上升的泳池中游泳 在一个 N x N 的坐标方格 grid 中,每一个方格的值 grid[i][j] 表示在位置 (i,j) 的平台高度. 现在开始下雨了.当时间为 t 时,此时雨水导致 ...
- Java实现蓝桥杯历届试题分考场
历届试题 分考场 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 n个人参加某项特殊考试. 为了公平,要求任何两个认识的人不能分在同一个考场. 求是少需要分几个考场才能满足条件. 输 ...
- Java实现 LeetCode 188 买卖股票的最佳时机 IV
188. 买卖股票的最佳时机 IV 给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你最多可以完成 k 笔交易. 注意: 你不能同时参与多 ...
- Java实现蓝桥杯互补二元组
分三处 1.当差值为0并且只有一个二元组就不管他 2.当差值为0并且二元组个数>=1加上他并减去它本身 3.当差值为存在并且不为0时直接加上他 因为都计算了两次,所以最后ans/2 用了map的 ...
- 【Python源码剖析】对象模型概述
Python 是一门 面向对象 语言,实现了一个完整的面向对象体系,简洁而优雅. 与其他面向对象编程语言相比, Python 有自己独特的一面. 这让很多开发人员在学习 Python 时,多少有些无所 ...
- 白嫖永久免费云服务器教程,永久免费虚拟主机、永久免费云数据库、搭建FTP服务器、服务器安装Linux / windows操作系统、服务器部署网站、宝塔一键部署多网站、独立ip、永久国内高速云服务器
一.准备工作 1. 注册账号 声明:切记不可用服务器做违法的事情 申请地址:https://www.sanfengyun.com/ 图文教程地址:https://www.cnblogs.com/zwn ...
- OpenSSH详解
OpenSSH详解(思维导图) 1. SSH概述 SSH 软件架构 认证方式 2. OpenSSH 2.1 客户端程序ssh 配置文件 ssh命令 客户端免密登录 scp sftp 2.2 服务端程序 ...
- CentOS7.5搭建spark2.3.1集群
一 下载安装包 1 官方下载 官方下载地址:http://spark.apache.org/downloads.html 2 安装前提 Java8 安装成功 zookeeper 安 ...