写点什么

消息队列:发送消息实现

用户头像
正向成长
关注
发布于: 1 小时前
消息队列:发送消息实现

本文主要基于实现使用的角度介绍和消息队列发送消息的方式和使用场景。

RocketMQ 发送消息

RocketMQ 支持三种方式的消息发送:

  1. 同步发送,Producer 向消息队列发送消息,同步等待直到 Broker 返回发送结果。比较适合于重要的消息通知等场景。

  2. 异步发送,Producer 向 MQ 发送消息,并执行发送 CallBack 函数,发送完立即返回,发送线程不阻塞。消息发送成功或失败的回调回函在一个新的线程中执行。比较适合于对响应时间比较敏感的场景,即发送端不能容忍长时间地等待 Broker 的响应。

  3. oneway 发送:Producer 向 MQ 发送消息,无需等待 Broker 的结果,也不注册 Callback 函数。即 Producer 发送消息,不需要关注消息是否成功存储在服务器上。比较适合于不关心发送结果的场景,例如日志的发送。


代码实现

首先,需要安装 RocketMQ 并启动NameServiceBroker,我选择的是最新的 4.9.0,下载号安装包之后,进入相应的目录。


1、启动NameService

./bin/mqnamesrv &
复制代码

可以通过日志确认是否启动成功执行tail -f ~/logs/rocketmqlogs/namesrv.log,看到

The Name Server boot success...
复制代码

即可。


2、启动Broker

sh bin/mqbroker -n localhost:9876 autoCreateTopicEnable=true
复制代码

刚开始我采用默认配置,启动 Broker 都失败,原来默认的最大和最小的内存配置都是 8G,vim bin/runbroker.sh,将[1]:

JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"
复制代码

修改为:

JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx2g -Xmn4g"
复制代码

之后,参考[2]实现了三种方式的消息发送


在调试的过程中出现过多次,No route info of this topic的错误,后来参考[3],将 MVN 中采用的 RocketMQ 的版本由 4.3.0 更改为 4.9.0 才可以成功执行。

参考资料

  1. 记一次RocketMq启动mqbroker时启动失败

  2. RocketMQ中文文档:样例

  3. 云析社区:Rocketmq之No route info of this topic解决思路


发布于: 1 小时前阅读数: 2
用户头像

正向成长

关注

正向成长 2018.08.06 加入

想要坚定地做大规模数据处理(流数据方向),希望结合结合批处理的传统处理方式,以及之后流批混合处理方向进行学习和记录。

评论

发布
暂无评论
消息队列:发送消息实现