案例
1 环境:idea+maven
2 前提 :确保你的RocketMq软件安装并运行成功,安装过程请戳这:https://blog.youkuaiyun.com/duduyingya/article/details/105706391
3 流程:生产者发送消息,消费者进行消费
4 开始:
4-1:配置文件:pom.xml
中依赖如下
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>4.4.0</version>
</dependency>
<dependency>
<groupId>com.alibaba.rocketmq</groupId>
<artifactId>rocketmq-common</artifactId>
<version>3.5.4</version>
</dependency>
<!-- 这个包不是必需品,是用来在控制台输出查看消息转换格式的 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.58</version>
</dependency>
4-2:创建一个生产者class
package com.pro;
import com.alibaba.fastjson.JSON;
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
/**
* 生产者
*/
public class producer0415 {
//声明消息主题名称
private static final String TOPICNAME="tx-mq-TOPIC";
public static void main(String[] args) {
//1.创建一个生产者,需要指定Producer的分组,
DefaultMQProducer defaultMQProducer = new DefaultMQProducer("MY-meme");
//2.设置命名服务的地址,和配置文件中的 rocketmq.namesrv.addr一致
defaultMQProducer.setNamesrvAddr("localhost:9876");
try{
//3.启动生产者
defaultMQProducer.start();
for(int i=0;i<10;i++) {
String text = "加油吖,MAYINGMEMEDA----"+i;
//4. topic+标签+具体信息,消费者会消费指定的标签
Message msg = new Message(TOPICNAME, "Tag-B", text.getBytes());
//5.开始发送,并在下面测试输出
SendResult sendResult = defaultMQProducer.send(msg);
System.out.println("###发送结果 result:" + JSON.toJSONString(sendResult));
}
}catch (Exception e){
e.printStackTrace();
}finally {
//6.关闭生产者
defaultMQProducer.shutdown();
}
}
}
4-3:创建一个消费者class
package com.consu;
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.client.exception.MQClientException;
import org.apache.rocketmq.common.consumer.ConsumeFromWhere;
import org.apache.rocketmq.common.message.MessageExt;
import java.util.Date;
import java.util.List;
/**
* 消费者
*/
public class Consumer0415 {
//声明消息主题名称
private static final String TOPICNAME="tx-mq-TOPIC";
public static void main(String[] args) {
//创建消费者属于哪个消费者组,一个组里可以有多个消费者
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("Consumer-g");
//设置Name server地址
consumer.setNamesrvAddr("localhost:9876");
//设置消费者从第一个偏移量开始消费,消息的偏移量相当于数组的下标,也是从0开始
consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);
try {
//第二个参数表示消费匹配的tag,与生产者发送的消费标签一致,* 表示topic所有的tag
consumer.subscribe(TOPICNAME,"Tag-B");
//2. 注册消费者监听
consumer.registerMessageListener(new MessageListenerConcurrently() {
/**
* @param msgs msgs 表示消息体
* @param context
* @return 如果成功,返回一个成功状态码
*/
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) {
for(MessageExt messageExt:msgs){
try {
System.out.println(new Date()+new String(messageExt.getBody(),"UTF-8"));
}catch (Exception e){
e.printStackTrace();
}
}
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
});
//3.consumer 启动
consumer.start();
System.out.println(".........消费端.........");
} catch (MQClientException e) {
e.printStackTrace();
}
}
}
4-4:依次启动生产者和消费者:会发现~出错了。。。。
控制台报错:org.apache.rocketmq.client.exception.MQClientException: No route info of this topic, TopicTest
这是为什么呢?
原因1:Broker没有正确连接到Name Server:
查看是否正确连接到 Name Server 命令: 打开cmd框框:进入到 RocketMq(不是插件,是RocketMq软件) 的 bin 文件夹下: 输入 mqadmin clusterList -n localhost:9876
,有的版本很可能输入 sh mqadmin clusterList -n localhost:9876
,无论输入哪个,出现下面这个窗口,并且信息都有,证明已经连接到了:如果没有出现以下信息,那么检查插件下的application.properties中是否设置了Name server
原因二:用户没有通过手工方式创建Topic
打开cmd框框:进入到 RocketMq(不是插件,是RocketMq软件) 的 bin 文件夹下,输入mqadmin updateTopic -n localhost:9876 -b localhost:10911 -t tx-mq-TOPIC
即可创建主题名字为 tx-mq-TOPIC 的主题。
出现success代表创建成功,这时候你在运行程序,就好用了~
原因三:Producer没有正确连接到Name Server
是因为你的防火墙没有关
进入到cmd框框中:输入netsh advfirewall set allprofiles state off
关闭防火墙就可以了~
5 启动效果:
生产者
消费者
大神链接:
https://blog.youkuaiyun.com/jiangyu1013/article/details/81478754
https://www.cnblogs.com/eyesfree/p/10032470.html
https://www.cnblogs.com/coder-zyc/p/12115317.html
https://blog.youkuaiyun.com/zixiao217/article/details/89844003