• 本文主要介绍RocketMQ的单机安装、双机主从高可用安装配置、运维管理平台搭建、与SpringBoot整合几个知识点,具备相关知识技能的同学请直接拉到最后点个 “在看” 即可。RocketMQ入门基础-环境&整合-LMLPHP

    文章开始之前需要先准备好JDK1.8或以上的服务器环境以及从rocketmq官网下载好二进制安装包,下载地址http://rocketmq.apache.org/dowloading/releases/

    单机安装配置

    工欲善其事必先利其器,要想深入了解RocketMQ得先把环境安装好,咱们先开始单机版RocketMQ的安装!

    单机情况下安装使用RocketMQ很简单,只需要分别启动NameServer和Broker Server即可!

    关闭RockerMQ需要使用下面的命令:

    # 先关闭Broker Server
    > sh bin/mqshutdown broker
    # 再关闭NameServer
    > sh bin/mqshutdown namesrv

    双机主从高可用搭建

    为了消除单机故障,增加可靠性或增大吞吐量,可以在多台服务器上部署多个NameServer和Broker,并为每个Broker部署一个或多个Slave。本节将说明使用两台机器,搭建双主、双从、无单点故障的高可用RocketMQ集群。假设现在有两台服务器,IP地址分别为:192.168.100.43和192.168.100.44,部署架构如下:RocketMQ入门基础-环境&整合-LMLPHP

    启动多个NameServer 和 Broker

    首先需要在两台服务器上分别启动NameServer(nohup sh bin/mqnamesrv &),这样我们就得到了一个无单点的NameServer服务,服务地址为192.168.100.43:9876和192.168.100.44:9876。

    然后在两台服务器中RocketMQ的conf目录分别建立两个文件 broker-master.propertiesbroker-slave.properties,下面是不同服务器的配置说明:

    namesrvAddr = 192.168.100.43:9876;192.168.100.44:9876
    brokerClusterName = DefaultCluster
    brokerName = broker-a
    brokerId = 0
    deleteWhen = 04
    fileReservedTime = 48
    brokerRole = SYNC_MASTER
    flushDiskType = ASYNC_FLUSH
    listenPort = 10911
    storePathRootDir = /app/rocketmq/store-a
    namesrvAddr = 192.168.100.43:9876;192.168.100.44:9876
    brokerClusterName = DefaultCluster
    brokerName = broker-b
    brokerId = 1
    deleteWhen = 04
    fileReservedTime = 48
    brokerRole = SLAVE
    flushDiskType = ASYNC_FLUSH
    listenPort = 11011
    storePathRootDir = /app/rocketmq/store-b
    namesrvAddr = 192.168.100.43:9876;192.168.100.44:9876
    brokerClusterName = DefaultCluster
    brokerName = broker-b
    brokerId = 0
    deleteWhen = 04
    fileReservedTime = 48
    brokerRole = SYNC_MASTER
    flushDiskType = ASYNC_FLUSH
    listenPort = 10911
    storePathRootDir = /app/rocketmq/store-b
    namesrvAddr = 192.168.100.43:9876;192.168.100.44:9876
    brokerClusterName = DefaultCluster
    brokerName = broker-a
    brokerId = 1
    deleteWhen = 04
    fileReservedTime = 48
    brokerRole = SLAVE
    flushDiskType = ASYNC_FLUSH
    listenPort = 11011
    storePathRootDir = /app/rocketmq/store-a

    然后分别使用如下命令启动两台服务器的主节点和从节点
    nohup sh bin/mqbroker -c conf/broker-master.properties &
    nohup sh bin/mqbroker -c conf/broker-slave.properties &

    这样一个高可用的RockerMQ集群就搭建好了,我们登陆可视化运维管理界面查看集群状态,集群正常启动。RocketMQ入门基础-环境&整合-LMLPHP

    重要参数说明

    本节主要是对Broker的配置文件中用到的参数进行说明

    可视化管理平台

    RocketMQ可以使用rocketmq-externals作为运维管理平台,Github地址https://github.com/apache/rocketmq-externals,我们需要将源码下载下来后再进行手动编译,过程如下:

    SpringBoot整合RocketMQ

    在SpringBoot中整合RocketMQ主要用到 rocketmq-spring-boot-starter 组件,下面是详细整合过程。

    <dependency>
    <groupId>org.apache.rocketmq</groupId>
    <artifactId>rocketmq-spring-boot-starter</artifactId>
    <version>2.1.0</version>
    </dependency>
    rocketmq:
    name-server: 192.168.100.43:9876;192.168.100.44:9876
    producer:
    group: test-group
    send-message-timeout: 3000

    如果是集群,多个name-server使用英文 ; 分割。

    /**
    * Description:
    * rocketMQ消息发送方法
    * @author javadaily
    */

    @Component
    public class MessageProduce {

    @Autowired
    private RocketMQTemplate rocketMQTemplate;

    /**
    * 发送消息
    * @param topic 主题
    * @param message 消息体
    */

    public void sendMessage(String topic,String message){
    this.rocketMQTemplate.convertAndSend(topic,message);
    }
    }

    使用RocketMQTemplate发送消息

    @Slf4j
    @Component
    @RocketMQMessageListener(
    topic = "test-topic",
    consumerGroup = "test-group",
    selectorExpression = "*"
    )
    public class MessageConsumer implements RocketMQListener<String> {
    @Override
    public void onMessage(String message) {
    log.info("received message is {}", message);
    }
    }

    消费者只需要继承RocketMQListener类即可,主要关注实现类上的 @RocketMQMessageListener 注解,配置的 topicconsumerGroup 需要跟消息生产者的配置保持一致。

    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class MessageProduceTest {
    @Autowired
    private MessageProduce messageProduce;

    @Test
    public void testSendMessage() {
    messageProduce.sendMessage("test-topic","Hello,JAVA日知录");
    }
    }




    朕已阅 RocketMQ入门基础-环境&整合-LMLPHP


    本文分享自微信公众号 - JAVA日知录(javadaily)。
    如有侵权,请联系 support@oschina.cn 删除。
    本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

    09-13 13:16
    查看更多