一、安装及启动(此处以windows安装示例,版本为3.2.6)
二、启动代码示例
一、安装及启动
由于官网资源4.0版本之前的都找不到了,因此用到的3.2.6版本为csdn下载。
简介:
² Name Server 是一个几乎无状态节点,可集群部署,节点之间无任何信息同步
² Broker 部署相对复杂,Broker 分为 Master 不 Slave,一个Master 可以对应多个 Slave,但是一个 Slave 只能对应一个Master,Master不Slave的对应关系通过指定相同的BrokerName,不同的BrokerId来定义,BrokerId为 0 表示Master,非 0 表示 Slave。Master 也可以部署多个。每个 Broker与Name Server 集群中的所有节点建立长连接,定时注册 Topic 信息到所有 Name Server。
² Producer与Name Server 集群中的其中一个节点(随机选择)建立长连接,定期从 Name Server 获取Topic 路由信息,并且提供 Topic 服务的 Master 建立长连接,定时向Master 发送心跳。Producer 完全无状态,可集群部署。
² Consumer与Name Server 集群中的其中一个节点(随机选择)建立长连接,定期从 Name Server 获取Topic 路由信息,并向提供 Topic 服务的 Master、Slave建立长连接,且定时向 Master、Slave 发送心跳。Consumer既可以从 Master 订阅消息,也可以从 Slave 订阅消息,订阅规则由 Broker 配置决定。
name serve起到有个路由的作用,消费者和生产者根据name serve找到消息存储的broker地址。
消息存储模型消息主体以及元数据都存储在CommitLog当中,Consume Queue是一个逻辑队列。此篇不做详解。
安装:rocketmq3.2.6版本。本机jdk版本为1.7/
首先解压rocketmq3.2.6压缩包,打开bin目录。
双击mqnamesrv.exe,启动name server,保持mqnamesrv.exe运行。
在目录路径输入cmd回车打开cmd。在窗口界面输入命令:mqbroker -n ip:端口
启动broker。
二、代码示例
简单的生产消息与消费消息
//声明并初始化一个producer
//需要一个producer group名字作为构造方法的参数,
DefaultMQProducer producer = new DefaultMQProducer("example11");
//设置NameServer地址,此处应改为实际NameServer地址,多个地址之间用;分隔
//NameServer的地址必须有,但是也可以通过环境变量的方式设置,不一定非得写死在代码里
//在本地搭建好broker后,记得指定nameServer的地址
producer.setNamesrvAddr("127.0.0.1:9876");
//调用start()方法启动一个producer实例。切记不用每条消息都启动
producer.start();
try {
for (int i = 0; i < 10; i++) {
Thread.sleep(5000); //每5秒发送一次MQ
Message msg = new Message("TopicAAA",// topic
"TagAA",// tag
(new Date() + "my first rocket++" + i).getBytes()// body
);
SendResult sendResult = producer.send(msg);
}
} catch (Exception e) {
e.printStackTrace();
}
//关闭
producer.shutdown();
消息生产者代码示例如上。
消息消费者代码如下:
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("please_rename_unique_group_name_4");
/**
* 设置Consumer第一次启动是从队列头部开始消费还是队列尾部开始消费<br>
* 如果非第一次启动,那么按照上次消费的位置继续消费
*/
consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);
//在本地搭建好broker后,记得指定nameServer的地址
consumer.setNamesrvAddr("127.0.0.1:9876");
consumer.setInstanceName("consumer");
consumer.subscribe("TopicAAA-test", "TagAA");
consumer.registerMessageListener(new MessageListenerConcurrently() {
@Override
public ConsumeConcurrentlyStatus consumeMessage(
List<MessageExt> msgs, ConsumeConcurrentlyContext context) {
for (MessageExt msg : msgs) {
System.out.println(new String(msg.getTopic()));
System.out.println(new String(msg.getTags()));
System.out.println("=== " + new String(msg.getBody()));
}
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
});
consumer.start();
System.out.println("Consumer Started.");
完