RocketMq服务器搭建和Java客户端配置

  • Post author:
  • Post category:java





RocketMq服务器搭建和Java客户端配置





一 服务器搭建



二 基本概念



三 Java客户端配置



四 与kafka比较



一 服务器搭建



直接按照官网推荐安装即可:


1.64bit OS, Linux/Unix/Mac is recommended


2.64bit JDK 1.7+


3.Maven 3.2.x


4.Git



官网详细安装地址:



http://rocketmq.incubator.apache.org/docs/quick-start/




二 基本概念



Name Server:类似zookeeper, 生产端和消费端可注册,启动Broker前,先启动Name Server


Broker:消息中转角色


Producer:消息生产者


Consumer:消息消费者


1)Pull:拉取消息 Pull Consumer



2)Push:注册监听函数,以回调的方式获取消息,本质上为pull


Producer Group:一类 Producer 的集合名称,这类 Producer 通常发送一类消息


Consumer Group:一类 Consumer 的集合名称,这类 Consumer 通常消费一类消息



三 Java客户端配置



1.springRocketMq.xml



2.MyProducer



进一步封装:



业务层调用:



MyConsumer:



3.指定一个NameServer地址


Rocketmq.properties:


RocketMq.ipAndPort = 192.168.13.127:9876


Spring配置文件中加上:



4.在web.xml中引入即可




四 与kafka比较



比较之前首先说明它和kafka都是非JMS标准(ActiveMQ),另外要明确Mq 特点异步处理 目的:减少响应时间,业务解耦和最终一致性,但不同Mq设计初衷不同,因此不能说优劣,只能说最适合某些业务场景。


1.丢失与重复的问题


丢失与重复是不可协调的矛盾。kafka允许丢失;mq不允许丢失,这种机制就会出现重复。


2.pull模型与push模型


kafka采用的是push模型,mq可选pull和push两种


push模型没有考虑到是消费端的处理能力,传统的pull设置定时拉取,这个时候如果消费者消费的较快,但是未到拉取的时间,那么会影响这个mq的速率。而mq采用的是长轮训的pull,即设置回调,一旦消费者消费完毕,立刻从broker中拉取消息。


3.定时的问题


消费者在处理消息的时候,可能会因为无法处理而返回reject 或者error,所以需要重新推送这些消息。 mq支持批量在broker中执行脚本来完成这个任务,kafka暂不支持。


4 事务的问题


这其实是一个可靠性还是实时性哪一个更被重视的问题。如果需要高实时性,就不能有事务。kafka没有事务,mq有。


5 注册中心的问题


kafka借zookeeper来进行注册;mq使用的是namesrv,它没有选举的这个过程。


6 集群问题


mq三种集群:


多主:多个Master 没有Slaver   broker down未消费的不能消费


多主多从:同步双写(Master,Slaver写完毕,返回成功) 不能自动切换


多主多从:异步复制(Master写完毕即返回成功,然后复制到slaver)


生产上可用的只有多主多从:异步复制


7.开源问题


mq刚开源到apache,官方文档较少;Spring无直接支持的jar包,未来开发上的配置可能需要配置升级,目前在项目配置上可做的事情有限,目前的配置是直接把consumer和producer托管给spring


8.消息堆积能力和吞吐量


消息堆积能力指的是在不影响broker正常功能的情况下,broker所能存储的做大消息数量,吞吐量是指单位时间内broker能接受producer的消息数量。


9.mq其他特点


1)增加广播消费,对于同一条消息,consumer group中的每一个consumer都消费


2)增加tag标签,粒度更细,可在broker上针对tag过滤


3)消息过滤,除针对tag,还可针对key(header) value(body)过滤



版权声明:本文为Jintao_Ma原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。