目录
RocketMq简介
rocketmq是一个消息中间件,基于Kafka的设计思想,但不是kafka的拷贝,它具有高吞吐量,高可用性,适用于大规模分布式系统的特点
RocketMq重要概念
1.producer
消息生产者
2.Consumer
消息消费者
3.PushConsumer
broker推送消息到consumer
4.PullConsumer
consumer主动从broker定时pull消息
5.ProducerGroup
一类producer的集合名称,这类producer通常发送一类消息,且发送逻辑一致
6.ConsumerGroup
一类consumer的集合名称,这类consumer通常消费一类消息,且消费逻辑一致
7.broker
消息中转站
8.nameserve
无状态的数据节点,记录broker的路由信息,以及topic,队列等
9.广播消息
一个消息被多个consumer消费,即使这些consumer属于同一个组,也会被组内的每个consumer都消费一次
10.集群消息
一个consumergroup中的consumer实例平均分摊消费消息,即不需要自己做消息消费的负载均衡,只需要扩展机器即可
11.Topic
表示一个类别
12.tag
Topic下的一个子类消息,更进一步细分消息类型
单机RocketMq搭建
1.上传rocketmq jar包
2.tar zxvf 解压rocketmq
3.修改虚拟机参数
/bin/runserver.sh /bin/runbroker.sh 中的虚拟机参数,因为默认4g,可以改小点
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m -XX:PermSize=128m -XX:MaxPermSize=320m"
4.创建log日志
在conf下更改日志打印路径
5.启动nameserver和broker
启动nameserver
nohup sh bin/mqnamesrv &
启动broker
nohup sh bin/mqbroker -n localhost:9876 &
查看连接此nameserve的broker
sh mqadmin clusterList -n localhost:9876
结果
可以看到此nameserve只有一个broker注册
测试消息的发送和接受
生产者代码:
public class FirstSyncProducer {
public static void main(String[] args) throws Exception{
//Instantiate with a producer group name.
Defau ltMQProducer producer = new
DefaultMQProducer("please_rename_unique_group_name");
// Specify name server addresses.
producer.setNamesrvAddr("192.168.122.10:9876");
producer.setVipChannelEnabled(false);
//Launch the instance.
producer.start();
for (int i = 0; i < 10; i++) {
//Create a message instance, specifying topic, tag and message body.
Message msg = new Message("TopicTest" /* Topic */,
"TagA" /* Tag */,
("Hello RocketMQ " +
i).getBytes(RemotingHelper.DEFAULT_CHARSET) /* Message body */
);
//Call send message to deliver message to one of brokers.
SendResult sendResult = producer.send(msg);
System.out.printf("%s%n", sendResult);
}
//Shut down once the producer instance is not longer in use.
producer.shutdown();
}
}
发送结果:
SendResult [sendStatus=SEND