1:下载rocketMq的安装包
下载后之后,解压到指定的目录,我下载的是4.9.3版本的如图
2:配置环境变量(如图)
3:配置完以后启动
进入bin目录,然后双击mqnamesrv.cmd启动,如图就启动成功
4:启动broker
使用cmd进入bin目录,然后执行
start mqbroker.cmd -n 127.0.0.1:9876 autoCreateTopicEnable=true
成功如图,切记,一定一定要出现后面的127.0.0.1:9876,出不来那么后面使用会报错
5:rocketMq-console可视化工具
下载该压缩包rocketmq-externals-master,然后解压到指定目录如图
然后修改配置文件,进入到如下图的目录然后进行修改。
6:启动可视化工具
cmd进入到rocketmq-console的目录后执行编译命令执行 mvn cleanpackage-Dmaven.test.skip=true 初次执行可能稍等1到3分钟,
执行完成以后
rocketmq-console目录下就会有一个target文件如图
cmd进入到这个目录,然后执行命令 java -jar rocketmq-console-ng-1.0.1.jar 就会出现如下图
出现这样子就说明启动成功了,然后localhost:8888再浏览器访问如下图
在这里说下顺序,首先先启动mqnamesrv.cmd,然后再启动mqbroker,然后再启动可视化工具,
下面我说下再springboot中的应用
1:打开idea然后新建springboot工程
新建项目-选择sdk然后下一步创建名称和存放的目录,然后点击完成,如下图
然后再新建模块跟上面创建项目一个流程,创建好就如下图
修改pom.xml文件如下图
然后再修改模块里面的pom.xml如图,里面需要依赖的包代码也贴上了。
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.12.RELEASE</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>rocketMq</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <modules> <module>springbootMq</module> <module>TestMq</module> </modules> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.3.12.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> <!--spring cloud alibaba依赖--> </dependencies> </dependencyManagement> <profiles> <profile> <!-- 开发环境 --> <id>dev</id> <properties> <profiles.active>dev</profiles.active> </properties> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> </profiles> </project>
然后我们再创建包,然后创建类,这里先创建一个生产者的监听类procuderConfig,如下图 代码也贴上了
import org.apache.rocketmq.client.exception.MQClientException; import org.apache.rocketmq.client.producer.DefaultMQProducer; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * @author * @version 1.0.0 * @Description TODO * @ClassName MqConfig.java * @createTime 2022年05月19日 14:14:00 */ @Configuration public class ProcuderConfig { @Value("${rocketmq.groupName}") private String groupName; @Value("${rocketmq.namesrvAddr}") private String namesrvAddr; @Bean public DefaultMQProducer createDefaultMQProducer() { DefaultMQProducer producer = new DefaultMQProducer(this.groupName); producer.setNamesrvAddr(this.namesrvAddr); try { producer.start(); System.out.println("我是一个好人"+String.format("producer is start ! groupName:[%s],namesrvAddr:[%s]", groupName, namesrvAddr)); } catch (MQClientException e) { System.out.println(String.format("producer is error {}", e.getMessage(), e)); } return producer; } }
然后我们创建一个controller类如下图,代码随后贴上
package mq.cn.springboot; import org.apache.rocketmq.client.producer.DefaultMQProducer; import org.apache.rocketmq.common.message.Message; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import java.nio.charset.StandardCharsets; /** * @author * @version 1.0.0 * @Description TODO * @ClassName ProcuderController.java * @createTime 2022年05月19日 14:49:00 */ @RestController public class ProcuderController { /** * 不能发一次消息,换一次 group ,因此 DefaultMQProducer 需要注入 ,主要作用是说明 procuder 的身份 */ @Autowired private DefaultMQProducer defaultMQProducer; @Value("${rocketmq.topic}") private String topic; @GetMapping("/send-message") public String sendMessage() { for (int i = 0; i < 1; i++) { Message message = new Message(this.topic, "springboot 整合 rocketmq 发送的消息".getBytes()); try { defaultMQProducer.send(message); } catch (Exception e) { e.printStackTrace(); System.out.println(String.format("producer is error {}", e.getMessage(), e.getStackTrace())); } } return "OK,success"; } }
以上是生产者的创建,下面我们来创建消费者的类
2:创建一个消费者的监听ConsumerConfig类如下图,代码也贴上了
package mq.cn.springboot; import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer; import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext; import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus; import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently; import org.apache.rocketmq.common.message.MessageExt; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.util.List; /** * @author * @version 1.0.0 * @Description TODO * @ClassName ConsumerConfig.java * @createTime 2022年05月19日 14:48:00 */ @Configuration public class ConsumerConfig { @Value("${rocketmq.namesrvAddr}") private String namesrvAddr; @Value("${rocketmq.groupName}") private String groupName; @Value("${rocketmq.topic}") private String topic; @Bean public DefaultMQPushConsumer getRocketMQConsumer() throws Exception { DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(groupName); consumer.setNamesrvAddr(namesrvAddr); consumer.subscribe(this.topic, "*"); consumer.registerMessageListener(new MessageListenerConcurrently() { @Override public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) { for (MessageExt msg : msgs) { System.out.println("message body:" + new String(msg.getBody())); } return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; } }); consumer.start(); return consumer; } }
然后我们再创建springboot的启动类如图,代码也贴上
package mq.cn; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.context.annotation.Import; /** * @author * @version 1.0.0 * @Description TODO * @ClassName MqApplication.java * @createTime 2022年05月19日 14:06:00 */ @SpringBootApplication(exclude = SecurityAutoConfiguration.class) @EnableDiscoveryClient @EnableFeignClients public class MqApplication { public static void main(String[] args) { SpringApplication.run(MqApplication.class, args); } //启动类接着声明一个负载均衡的请求器@LoadBalanced,还有请求发起的工具RestTemplate }
然后创建一个配置文件,如下图,内容我都贴上
## 服务名称 spring: application: name: rocketmq ## 端口号 server: port: 8081 ## rocketmq 的 nameServer rocketmq: namesrvAddr: 127.0.0.1:9876 topic: TopicTest ## 使用服务名称作为创建 DefaultMQProducer 中的 group groupName: ${spring.application.name}
然后就可以启动工程了,启动成功的如下图
然后再浏览器访问
http://localhost:8081/send-message
如图,然后控制台会打印出消费者收到的消息如图
然后我们再mq的可视化工具界面就可以看到收到的消息,如图
就到这里,不懂的留言,一起交流it知识,我也是菜菜鸟