spring参考文献_阿里RocketMq试用记录+简单的Spring集成

RocketMq试用+简单的Spring集成

经过2天的试用初步了解了一下RocketMq的基本用法,搜索了一下度娘,没有找到Spring的例子,所以简单搞了一点代码感受一下。

1.RocketMq

RocketMQ的前身是Metaq,当Metaq3.0发布时,产品名称改为RocketMQ,有以下特点:

1) 能够保证严格的消息顺序

2) 提供丰富的消息拉取模式

3) 高效的订阅者水平扩展能力

4)实时的消息订阅机制

5)亿级消息堆积能力

2.核心原理

2.1. 数据结构

ddae74c4e4bab0b7724968662bda6bac.png
5e318071a94c287b51ce2e3bf1d3725a.png

(1)所有数据单独储存到commit Log ,完全顺序写,随机读

(2)对最终用户展现的队列实际只储存消息在Commit Log 的位置信息,并且串行方式刷盘

(3)按照MessageId查询消息

59a5231dde8e574fdb349cdce96b019e.png

4)根据查询的key的hashcode%slotNum得到具体的槽位置

775a9f79cb5172ecff4d50b8fa42d08e.png

(5)根据slotValue(slot对应位置的值)查找到索引项列表的最后一项

(6)遍历索引项列表返回查询时间范围内的结果集

2.2. 刷盘策略

rocketmq中的所有消息都是持久化的,先写入系统pagecache,然后刷盘,可以保证内存与磁盘都有一份数据,访问时,可以直接从内存读取

使用简单的符号标识不同的标题,将某些文字标记为粗体或者斜体,创建一个链接等,详细语法参考帮助?。

本编辑器支持 Markdown Extra , 扩展了很多好用的功能。具体请参考[Github][2].

2.3. 内存机制

0c6ec01fffa0789528a19a7387b495ab.png

2.4. 工作模式

ce37a6b9ec8fa3dc0be62ea07ddc1974.png

3. 环境安装

3.1. JAVA环境安装

安装

rpm -ivh jdk-7u80-linux-x64.rpm

1

环境变量

JAVA_HOME=/usr/java/jdk1.7.0_80

CLASSPATH=.:$JAVA_HOME/lib.tools.jar

PATH=$JAVA_HOME/bin:$PATH

export JAVA_HOME CLASSPATH PATH

export ROCKETMQ_HOME=/usr/local/service/alibaba-rocketmq

3.2. RocketMq安装

https://github.com/alibaba/RocketMQ/releases下载3.2.6,解压1

4. 测试网络拓扑

889273722ffaea09897a5d0698c90afb.png

因为手里没有其他服务器,105那台缺少一个slave,在同步双写模式下,发送消息会返回 SLAVE_NOT_AVAILABLE,不过消息已经发送成功,只是slave没有写成功。

5. 启停操作

这里只给出一个基本的示例,各个模式的启停在本文最后的参考文献中会有详细的说明。这里不再赘述。

1

启动nameserver

nohup ./mqnamesrv &

1

停止nameServer

./mqshutdown namesrv

1

启动broker(单master)(多master,多master+slave)对应的(异步复制,同步双写)

nohup sh mqbroker -n 192.168.146.109:9876 -c $ROCKETMQ_HOME/conf/2m-noslave/broker-a.properties &

1

停止broker

./mqshutdown broker

1

6. 运维指令

查看集群情况

./mqadmin clusterList -n 127.0.0.1:9876

1

查看broker状态

./mqadmin brokerStatus -n 127.0.0.1:9876 -b 192.168.146.105:10911

1

查看topic列表

./mqadmin topicList -n 127.0.0.1:9876

1

查看topic状态

./mqadmin topicStatus -n 127.0.0.1:9876 -t PushTopic

1

查看topic路由

./mqadmin topicRoute -n 127.0.0.1:9876 -t PushTopic

1

7. 基本测试

基本测试采用java直接编码的方式生产和消费消息,例子来源于参考文献的《RocketMQ开发教程》。本文最后的代码示例,采用了spring的形式。

Producer

package com.jd.wxz;

import com.alibaba.rocketmq.client.producer.DefaultMQProducer;

import com.alibaba.rocketmq.client.producer.SendResult;

import com.alibaba.rocketmq.common.message.Message;

public class Producer {

public static void main(String[] args){

DefaultMQProducer producer = new DefaultMQProducer("Producer");

producer.setNamesrvAddr("192.168.146.109:9876");

try {

producer.start();

Message msg = new Message("PushTopic

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值