RocketMQ-环境搭建

目录

特点

术语词汇


特点

  1. 支持事务消息
  2. 支持顺序消息
  3. 支持consumer端tag过滤(还没研究)

术语词汇

  1. Name Server:服务注册发现,用于生产者获取Broker节点信息 端口号:9876
  2. Broker:存储和负责转发消息 默认10911
  3. Producer :生产者
  4. Consumer:消费者

单机版本安装

  1. 官网下载压缩包,解压配置文件:   unzip rocketmq-all-4.6.0-bin-release.zip
  2. 内存修改,由于默认比较大,找到# runserver.sh,# runbroker.sh两个文件修改内存为                             JAVA_OPT="${JAVA_OPT} -server –Xms128m –Xmx128m –Xmn128m"
  3. 启动NameServer: nohup sh bin/mqnamesrv &
  4. 启动mqbroker: nohup sh bin/mqbroker -c ./conf/broker.conf -n 127.0.0.1:9876 &
  5. 查看是否成功: cat nohup.out   ,出现success字样为成功
  6. systemctl stop firewalld关闭防火墙(不关会访问不通)
  7. 关闭命令:

    关闭namesrv服务:sh bin/mqshutdown namesrv    关闭broker服务 :sh bin/mqshutdown broker

  8. 使用Rocketmq-console(可视化控制台)可以更好的管理,git有项目,直接d就可以

集群部署

环境准备

  1. 两台已经安装单机版完毕的机器,(我的ip分别为 192.168.199.153,192.168.199.152)

  2. systemctl stop firewalld  关闭防火墙(不关会访问不通)

  3. 在192.168.199.153找到conf/broker.conf,修改内容

    #集群名
    brokerClusterName = zdxCluster
    #Broker名
    brokerName = broker-a
    #0:Master,1:Slave
    brokerId = 0
    #删除动作,默认值04表示凌晨4 点
    deleteWhen = 04
    #两天触发一次
    fileReservedTime = 48
    #ASYNC_MASTER 异步复制Master,SYNC_MASTER 同步双写Master - SLAVE
    brokerRole = ASYNC_MASTER
    #刷盘方式 - ASYNC_FLUSH 异步刷盘 - SYNC_FLUSH 同步刷盘
    flushDiskType = ASYNC_FLUSH
  4. 在192.168.199.152找到conf/broker.conf,修改内容

    #集群名
    brokerClusterName = zdxCluster
    #Broker名
    brokerName = broker-b
    #0:Master,1:Slave
    brokerId = 0
    #删除动作,默认值04表示凌晨4 点
    deleteWhen = 04
    #两天触发一次
    fileReservedTime = 48
    #ASYNC_MASTER 异步复制Master,SYNC_MASTER 同步双写Master - SLAVE
    brokerRole = ASYNC_MASTER
    #刷盘方式 - ASYNC_FLUSH 异步刷盘 - SYNC_FLUSH 同步刷盘
    flushDiskType = ASYNC_FLUSH
  5. 启动方式在153上:nohup sh bin/mqnamesrv &

  6. 启动方式在153上:nohup sh bin/mqbroker -c ./conf/broker.conf -n 127.0.0.1:9876 &
  7. (将152的broker注册在152的nameServer上)启动方式在152上:nohup sh bin/mqbroker -c ./conf/broker.conf -n 192.168.199.153:9876 &

  8. Rocketmq-console观看效果

SpringBoot整合 Rocketmq

Maven依赖

 <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.0.RELEASE</version>
  </parent>


    <!-- springboot-web组件 -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- 连接rocketmq组件 -->
    <dependency>
      <groupId>org.apache.rocketmq</groupId>
      <artifactId>rocketmq-spring-boot-starter</artifactId>
      <version>2.0.3</version>
    </dependency>
    <!-- set get组件 -->
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
    </dependency>

配置文件

application.yml
rocketmq:
  ###连接地址nameServer
  name-server: 192.168.199.153:9876;
  ###生产者命名
  producer:
    group: zdx_producer
server:
  port: 8088

建一个TOPIC(主题)(我用的主题名为zdxTtopic,如果命名不同,下面代码请酌情修改)

实体类

@Data
public class OrderEntity implements Serializable {

    private String orderId;
    private String orderName;

    public OrderEntity(String orderId, String orderName) {
        this.orderId = orderId;
        this.orderName = orderName;
    }
    public OrderEntity() {

    }

    @Override
    public String toString() {
        return "OrderEntity{" +
                "orderId='" + orderId + '\'' +
                ", orderName='" + orderName + '\'' +
                '}';
    }

生产者

public class ProducerSend {
    public void sendMsg() throws InterruptedException, RemotingException, MQClientException, MQBrokerException {
        // 创建分组
        DefaultMQProducer producer = new DefaultMQProducer();
        // 生产者名称
        producer.setProducerGroup("zdxGroup");
        // 连接地址
        producer.setNamesrvAddr("192.168.199.153:9876");
        producer.start();
        Message msg=new Message("zdxTtopic","晚上一起去烧烤".getBytes());
        long orderId=System.currentTimeMillis();
        SendResult result = producer.send(msg, new MessageQueueSelector() {
            @Override
            public MessageQueue select(List<MessageQueue> mqs, Message message, Object o) {
                //手动将消息存放在我们的队列
                return mqs.get(0);
            }
        }, orderId);
    }

    public static void main(String[] args) {
        try {
            new ProducerSend().sendMsg();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (RemotingException e) {
            e.printStackTrace();
        } catch (MQClientException e) {
            e.printStackTrace();
        } catch (MQBrokerException e) {
            e.printStackTrace();
        }
    }


}

消费者

@Service
@RocketMQMessageListener(topic = "zdxTtopic", consumerGroup = "zdxConsumer")
public class OrdeConsumer implements RocketMQListener<String> {
    @Override
    public void onMessage(String t) {
        System.out.println("这是个消费者:" + t);
    }
}

启动项目可以看到效果

(RocketMQ除了要开放9876和10911端口外,还需要开放10909和10912端口)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Linux上搭建RocketMQ环境,你可以按照以下步骤进行操作: 1. 首先,确保你已经安装了Java Development Kit(JDK)。你可以使用以下命令来检查是否已经安装了JDK: ``` java -version ``` 如果没有安装,请先安装JDK。 2. 下载RocketMQ压缩包。你可以从RocketMQ官方网站或者GitHub仓库上下载最新的稳定版本。 3. 解压RocketMQ压缩包。可以使用以下命令解压: ``` tar zxvf rocketmq-all-x.x.x-bin-release.zip ``` 4. 配置环境变量。打开你的`~/.bashrc`文件(或者其他适用的配置文件),并添加以下内容: ``` export ROCKETMQ_HOME=解压后的RocketMQ目录路径 export PATH=$PATH:$ROCKETMQ_HOME/bin ``` 5. 保存并关闭配置文件。然后执行以下命令以使配置生效: ``` source ~/.bashrc ``` 6. 配置RocketMQ。进入RocketMQ目录,并编辑`conf/broker.conf`和`conf/namesrv.conf`文件,根据你的需求进行配置。主要配置项包括监听IP、端口、存储路径等。 7. 启动Name Server。执行以下命令启动Name Server: ``` nohup sh bin/mqnamesrv & ``` 8. 启动Broker Server。执行以下命令启动Broker Server: ``` nohup sh bin/mqbroker -n localhost:9876 & ``` 9. 验证RocketMQ是否成功启动。你可以通过查看日志文件或者执行以下命令来验证RocketMQ是否成功启动: ``` tail -f ~/logs/rocketmqlogs/namesrv.log tail -f ~/logs/rocketmqlogs/broker.log ``` 现在,你已经成功在Linux上搭建了RocketMQ环境。你可以使用RocketMQ提供的命令行工具或者编写代码来使用RocketMQ进行消息传递。 请注意,以上步骤仅适用于Linux环境。如果你使用的是其他操作系统,请参考相应的文档进行配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值