RocketMQ 官网 |
RocketMQ 快速开始&安装
一、安装
基本步骤略
windows bat
start .\bin\mqnamesrv.cmd
timeout 5
start .\bin\mqbroker.cmd -n 127.0.0.1:9876 autoCreateTopicEnable=true
二、控制台
git clone https://github.com/apache/rocketmq-externals
cd rocketmq-console
mvn clean package -Dmaven.test.skip=true
注意:打包前在rocketmq-console中配置namesrv集群地址:
rocketmq.config.namesrvAddr=192.168.25.135:9876;192.168.25.138:9876
启动
java -jar rocketmq-console-ng-1.0.0.jar
浏览器访问http://localhost:8080
三、普通消息
3.1 基本步骤
3.1.1 生产者
- 创建消息生产者producer,并制定生产者组名
- 指定Nameserver地址
- 启动producer
- 创建消息对象 Message,指定主题Topic、Tag和消息体
- 发送消息
- 关闭生产者producer
3.1.2 消费者
- 创建消费者Consumer,制定消费者组名
- 指定Nameserver地址
- 订阅主题Topic和Tag
- 设置回调函数,处理消息
- 启动消费者consumer
3.2 同步消息
3.2.1 生产者
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.remoting.common.RemotingHelper;
/**
* <h1>同步消息 - 生产者</h1>
*
* @author Vincent Vic
* @version 1.0
*/
public class ProducerSync {
public static void main(String[] args) throws Exception {
// 1.创建消息生产者producer,并制定生产者组名
DefaultMQProducer producer = new DefaultMQProducer("demo_producer_group");
// 2.指定Nameserver地址
producer.setNamesrvAddr("127.0.0.1:9876");
// 3.启动producer
System.out.println("生产者启动");
producer.start();
for (int i = 0; i < 3; i++) {
// 4.创建消息对象,指定主题Topic、Tag和消息体
/**
* 参数一:消息主题Topic
* 参数二:消息Tag
* 参数三:消息内容
*/
Message msg = new Message("Topic_demo_sync", "Tag_demo_sync",
("Hello," + i).getBytes(RemotingHelper.DEFAULT_CHARSET));
// 5.发送同步消息
SendResult sendResult = producer.send(msg);
System.out.println("发送结果:" + sendResult);
}
// 6.关闭生产者producer
producer.shutdown();
System.out.println("生产者关闭");
}
}
3.2.2 消费者
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.apache.rocketmq.remoting.common.RemotingHelper;
import java.io.UnsupportedEncodingException;
import java.util.List;
/**
* <h1>同步消息 - 消费者</h1>
*
* @author Vincent Vic
* @version 1.0
*/
public class ConsumerSync {
public static void main(String[] args) throws Exception {
// 1.创建消费者Consumer,制定消费者组名
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("demo_consumer_group");
// 2.指定Nameserver地址
consumer.setNamesrvAddr("127.0.0.1:9876");
// 消息拉取最大条数
consumer.setConsumeMessageBatchMaxSize(2);
// 3.订阅主题Topic和Tag
consumer.subscribe("Topic_demo_sync", "*");
// 4.设置回调函数,处理消息
consumer.registerMessageListener(new MessageListenerConcurrently() {
// 接受消息内容
@Override
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) {
for (MessageExt msg : msgs) {
try {
// 获取主题
String topic = msg.getTopic();
// 获取标签
String tags = msg.getTags();
// 获取信息
byte[] body = msg.getBody();
String result = new String(body, RemotingHelper.DEFAULT_CHARSET);
System.out.println("Consumer消费信息:topic:" + topic + ",tags:" + tags + ",result:" + result);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
});
// 5.启动消费者consumer
consumer.start();
}
}
3.3 异步消息
3.3.1 生产者
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendCallback;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.remoting.common.RemotingHelper;
/**
* <h1>异步消息 - 生产者</h1>
*
* @author Vincent Vic
* @version 1.0
*/
public class ProducerASync {
public static void main(String[] args) throws Exception {
// 1.创建消息生产者producer,并制定生产者组名
DefaultMQProducer producer = new DefaultMQProducer("demo_producer_group");
// 2.指定Nameserver地址
producer.setNamesrvAddr("127.0.0.1:9876");
// 3.启动producer
System.out.println("生产者启动");
producer.start();
for (int i = 0; i < 3; i++) {
// 4.创建消息对象,指定主题Topic、Tag和消息体
/**
* 参数一:消息主题Topic
* 参数二:消息Tag
* 参数三:消息内容
*/
Message msg = new Message("Topic_demo_async", "Tag_demo_async",
("Hello," + i).getBytes(RemotingHelper.DEFAULT_CHARSET));
// 发送消息到一个Broker,异步发送没有返回值,需要使用 SendCallback 接收异步返回结果的回调
producer.send(msg, new SendCallback() {
@Override
public void onSuccess(SendResult sendResult) {
System.out.println("发送成功:" + sendResult);
}
@Override
public void onException(Throwable throwable) {
System.out.println("发送异常:" + throwable.getMessage());
}
});
}
Thread.sleep(2000);
// 6.关闭生产者producer
producer.shutdown();
System.out.println("生产者关闭");
}
}
3.23.2 消费者
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.apache.rocketmq.remoting.common.RemotingHelper;
import java.io.UnsupportedEncodingException;
import java.util.List;
/**
* <h1>异步消息 - 消费者</h1>
*
* @author Vincent Vic
* @version 1.0
*/
public class ConsumerASync {
public static void main(String[] args) throws Exception {
// 1.创建消费者Consumer,制定消费者组名
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("demo_consumer_group");
// 2.指定Nameserver地址
consumer.setNamesrvAddr("127.0.0.1:9876");
// 消息拉取最大条数
consumer.setConsumeMessageBatchMaxSize(2);
// 3.订阅主题Topic和Tag
consumer.subscribe("Topic_demo_async", "*");
// 4.设置回调函数,处理消息
consumer.registerMessageListener(new MessageListenerConcurrently(