实战学习RocketMQ

1.概念简介

Apache RocketMQ是一个采用Java语言开发的分布式的消息系统

  • Producer                    消息生产者,负责产生消息,一般由业务系统负责产生消息。
  • Producer Group         一类 Producer 的集合名称,这类 Producer 通常发送一类消息,且发送逻辑一致。
  • Consumer                  消息费者,负责消费消息,一般是后台系统负责异步消费。
  • Push Consumer         服务端向消费者端推送消息
  • Pull Consumer           消费者端向服务定时拉取消息
  • Consumer Group       一类 Consumer 的集合名称,这类 Consumer 通常消费一类消息,且消费逻辑一致。
  • NameServer              集群架构中的组织协调员 收集broker的工作情况 不负责消息的处理
  • Broker                       是RocketMQ的核心负责消息的发送、接收、高可用等(真正干活的) 需要定时发送自身情况到NameServer,默认10秒发送一次,超时2分钟会认为该broker失效。
  • Topic                         不同类型的消息以不同的Topic名称进行区分,如User、Order等 是逻辑概念 
  • Message Queue       消息队列,用于存储消息

2.部署安装

这里介绍两种安装方式:

2.1非docker安装

下载地址:https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.3.2/rocketmq-all-4.3.2-bin-release.zip

在文件目录,执行命令解压文件:          

unzip rocketmq-all-4.3.2-bin-release.zip

进入文件bin目录,启动nameserver:

./mqnamesrv

发现启动报错:

启动错误,是因为内存不够,导致启动失败,原因:RocketMQ的配置默认是生产环境的配置,设置的jvm的内存大小值比较大,对于学习而言没有必要设置这么大,测试环境的内存往往都不是很大,所以需要调整默认值。
解决办法:

调整默认的内存大小参数:

在bin 目录   vim runserver.sh

将所有改为128m

vim runbroker.sh   同上

再次启动,不再报错

./mqnamesrv

-n 指定nameserver地址和端口
./mqbroker -n 172.16.185.55:9876

2.1.1编写JAVA代码进行测试

引入依赖:

<dependencies>
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>4.3.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- java编译插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>

编写代码:

public class SyncProducer {
public static void main(String[] args) throws Exception {
//Instantiate with a producer group name.
DefaultMQProducer producer = new
DefaultMQProducer("test-group");
// Specify name server addresses.
producer.setNamesrvAddr("172.16.55.185:9876");
//Launch the instance.
producer.start();
for (int i = 0; i < 100; i++) {
//Create a message instance, specifying topic, tag and message body.
Message msg = new Message("TopicTest11" /* 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();
}
}

测试结果会发现,发送消息会报错。原因是什么呢?仔细观察broker启动的信息:

The broker[stylefeng, 172.17.0.1:10911] boot success. serializeType=JSON and name server
is 172.16.185.55:9876

会发现,broker的ip地址是172.17.0.1,那么在开发机上是不可能访问到的。所以,需要指定broker的ip地址。
#进入文件conf目录 创建broker配置文件

vim broker.conf
brokerIP1=172.16.55.185
namesrvAddr=172.16.55.185:9876
brokerName=broker_haoke_im

#启动broker,通过 -c 指定配置文件

./mqbroker -c /rmqbroker/conf/broker.conf
The broker[stylefeng, 172.16.55.185:10911] boot success. serializeType=JSON and name
server is 172.16.55.185:9876 #这样就可以进行访问了

2.2docker安装

#拉取镜像

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值