rocketmq 集群环境部署及与spring cloud 集成

1 下载zip 安装包

rocketmq-all-5.1.4-bin-release.zip

2 修改启动配置,防止默认内存配置过高

runserver.sh/runbroker.sh/tools.sh

3 启动namesrv

nohup sh bin/mqnamesrv >>namesrv.log &

4 启动broker+proxy

单点模式:

nohup sh bin/mqbroker -c conf/brock.conf -pc conf/rmq-proxy.json --enable-proxy >>broker.log&

集群模式:2m+2s-async 多主多从,异步复制

A1机器> nohup sh bin/mqbroker -n '192.168.1.1:9876;192.168.1.2:9876;192.168.1.3:9876' -c conf/2m-2s-async/broker-a.properties -pc conf/rmq-proxy-a.json --enable-proxy >>broker-a.log&

B2机器> nohup sh bin/mqbroker -n '192.168.1.1:9876;192.168.1.2:9876;192.168.1.3:9876' -c conf/2m-2s-async/broker-b.properties -pc conf/rmq-proxy-b.json --enable-proxy >>broker-b.log&

B3机器> nohup sh bin/mqbroker -n '192.168.1.1:9876;192.168.1.2:9876;192.168.1.3:9876' -c conf/2m-2s-async/broker-a-s.properties -pc conf/rmq-proxy-a-s.json --enable-proxy >>broker-a-s.log&

A4机器>nohup sh bin/mqbroker -n '192.168.1.1:9876;192.168.1.2:9876;192.168.1.3:9876' -c conf/2m-2s-async/broker-b-s.properties -pc conf/rmq-proxy-b-s.json --enable-proxy >>broker-b-s.log&

5 配置控制面板 rocketmq-dashboard

nohup java -jar -Xms512m -Xmx1G rocketmq-dashboard-1.0.0.jar >> rocketmq-dashboard.log &

注意事项:

  • 所有ip配置均配置本机外网ip
  • 端口不重复,安全组开启相应端口
  • -n 多主机情况,需要增加引号或双引号
  • broker 监听端口,不重复
  • proxy 监听端口,不重复

6 集成到spring cloud 具体服务中:

0 通过rocketmq-dashboard 增加topic

1 增加配置

#NameServer地址

rocketmq.name-server: 192.168.1.1:9876

rocketmq.producer.group: sale-producer-group

2 增加依赖

复制代码
implementation 'org.apache.rocketmq:rocketmq-spring-boot-starter:2.1.1'

3 消息生产者

java 复制代码
import com.alibaba.fastjson.JSONObject;
import lombok.AllArgsConstructor;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Mono;

import javax.annotation.Resource;

@RestController
@AllArgsConstructor
public class SaleMQProducer {
    private final Logger LOGGER = LoggerFactory.getLogger(SaleMQProducer.class);
    @Resource
    private RocketMQTemplate rocketMQTemplate;

    @RequestMapping(value = "/api/mq/create", method = RequestMethod.POST)
    Object create(@RequestBody JSONObject req) {
        return Mono.defer(() -> {
            String topic = req.getString("topic");
            String tag = req.getString("tag");
            String body = req.getString("body");
            LOGGER.info("topic={},tag={},body={}", topic, tag, body);
            //支持带tag发送
            String dest = String.format("%s:%s", topic, tag);
            rocketMQTemplate.convertAndSend(dest, body);
            return Mono.just(true);
        });
    }
}

4 消息消费者

java 复制代码
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.stereotype.Component;


@Component
@RocketMQMessageListener(consumerGroup = "sale-consumer-group", topic = "TEST_FIRST")
public class SaleMQConsumer implements RocketMQListener<String> {
    @Override
    public void onMessage(String message) {
        System.out.println("Received message : " + message);
    }
}

5 消息消费者,增加tag匹配(默认* 全量匹配)

java 复制代码
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.stereotype.Component;


@Component
@RocketMQMessageListener(consumerGroup = "sale-consumer-group-tag-a", topic = "TEST_FIRST", selectorExpression = "TagA")
public class SaleMQConsumerTagA implements RocketMQListener<String> {
    @Override
    public void onMessage(String message) {
        System.out.println("Received message : " + message);
    }
}
相关推荐
救救孩子把1 天前
从 JDK 8 到 JDK 23:HotSpot 垃圾回收器全景演进与深度剖析
java·开发语言·jvm·jdk
计算机毕业设计小帅1 天前
【2026计算机毕业设计】基于Springboot的校园失物招领小程序
spring boot·小程序·课程设计
ha20428941941 天前
Linux操作系统学习之---线程控制
java·linux·学习
Knight_AL1 天前
Spring AOP 中@annotation的两种写法详解
java·spring
某空m1 天前
【Android】BottomNavigationView实现底部导航栏
android·java
顾漂亮1 天前
Spring AOP 实战案例+避坑指南
java·后端·spring
SimonKing1 天前
Mybatis-Plus的竞争对手来了,试试 MyBatis-Flex
java·后端·程序员
光军oi1 天前
JAVA全栈JVM篇————初识JVM
java·开发语言·jvm
我命由我123451 天前
PDFBox - PDFBox 加载 PDF 异常清单(数据为 null、数据为空、数据异常、文件为 null、文件不存在、文件异常)
java·服务器·后端·java-ee·pdf·intellij-idea·intellij idea
7哥♡ۣۖᝰꫛꫀꪝۣℋ1 天前
Spring Boot
java·spring boot·后端