【RocketMQ】RocketMQ 5.1.0版本Proxy集群模式部署实践

这篇具有很好参考价值的文章主要介绍了【RocketMQ】RocketMQ 5.1.0版本Proxy集群模式部署实践。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

为了支持长远的云原生发展,RocketMQ引入了一个全新的模块:Proxy,官方对RocketMQ客户端提供了独立的开源项目:https://github.com/apache/rocketmq-clients,如果要使用这个新的客户端,必须要使用Proxy作为endpoint。

Proxy有两种搭建方式:

  • LOCAL:本地模式,顾名思义,通过追加参数,在broker本地启动
  • CLUSTER:集群模式,作为独立的集群启动,搭建完nameserver和broker后,独立部署

本地模式更适合非正式的场景,如调试、开发,线上环境还是推荐集群模式,本文基于集群模式进行部署验证。

启动proxy使用mqproxy命令:

[root@XXGL-T-TJSYZ-REDIS-01 bin]# ./mqproxy -help
usage: mqproxy [-bc <arg>] [-h] [-n <arg>] [-pc <arg>] [-pm <arg>]
 -bc,--brokerConfigPath <arg>   Broker config file path for local mode
 -h,--help                      Print help
 -n,--namesrvAddr <arg>         Name server address list, eg: '192.168.0.1:9876;192.168.0.2:9876'
 -pc,--proxyConfigPath <arg>    Proxy config file path
 -pm,--proxyMode <arg>          Proxy run in local or cluster mode
[root@XXGL-T-TJSYZ-REDIS-01 bin]# 
  • -bc:使用本地模式时,指定broker的配置文件路径
  • -h:输出帮助信息;
  • -n:nameserver路径,也可以通过在配置文件中配置namesrvAddr指定;
  • -pc:proxy配置文件路径;
  • -pm:代理模式:LOCAL / CLUSTER,默认为CLUSTER(集群模式)

需要编辑的文件有:

  • bin/runserver.sh:修改GC日志目录和JVM参数;(非必须)
  • conf/rmq-proxy.json:
    主要是设置集群名、自定义端口
{
  "rocketMQClusterName": "littleCat",
  "remotingListenPort":28080,
  "grpcServerPort":28081
}

完整参数见源码:org.apache.rocketmq.proxy.config.ProxyConfig

启动脚本:

#!/bin/bash
. /etc/profile

nohup sh /neworiental/rocketmq-5.1.0/rocketmq-proxy/bin/mqproxy -n '172.24.30.192:19876;172.24.30.193:19876;172.24.30.194:19876' -pc /neworiental/rocketmq-5.1.0/rocketmq-proxy/conf/rmq-proxy.json >/dev/null 2>&1 &
echo "deploying rocketmq-proxy..."

停止脚本:

#!/bin/bash
. /etc/profile

PID=`ps -ef | grep '/neworiental/rocketmq-5.1.0/rocketmq-proxy' | grep -v grep | awk '{print $2}'`
if [[ "" !=  "$PID" ]]; then
  echo "killing rocketmq-proxy : $PID"
  kill $PID
fi

启动成功

【RocketMQ】RocketMQ 5.1.0版本Proxy集群模式部署实践

客户端测试:

pom依赖:

        <dependency>
            <groupId>org.apache.rocketmq</groupId>
            <artifactId>rocketmq-client-java</artifactId>
            <version>5.0.4</version>
        </dependency>

生产者:

package cn.xdf.xadd.rmq.test.newclient;

import org.apache.rocketmq.client.apis.ClientConfiguration;
import org.apache.rocketmq.client.apis.ClientException;
import org.apache.rocketmq.client.apis.ClientServiceProvider;
import org.apache.rocketmq.client.apis.message.Message;
import org.apache.rocketmq.client.apis.producer.Producer;
import org.apache.rocketmq.client.apis.producer.SendReceipt;

import java.io.IOException;
import java.nio.charset.StandardCharsets;

public class ProducerNormalMessageExample {

    public static void main(String[] args) throws ClientException, IOException {
        final ClientServiceProvider provider = ClientServiceProvider.loadService();

        String endpoints = "172.24.30.192:28080";
        ClientConfiguration clientConfiguration = ClientConfiguration.newBuilder()
                .setEndpoints(endpoints)
                .build();
        String topic = "zhurunhua-test";
        // In most case, you don't need to create too many producers, singleton pattern is recommended.
        final Producer producer = provider.newProducerBuilder()
                .setClientConfiguration(clientConfiguration)
                // Set the topic name(s), which is optional but recommended. It makes producer could prefetch the topic
                // route before message publishing.
                .setTopics(topic)
                // May throw {@link ClientException} if the producer is not initialized.
                .build();
        // Define your message body.
        byte[] body = "This is a normal message for Apache RocketMQ".getBytes(StandardCharsets.UTF_8);
        String tag = "new-client-test";
        final Message message = provider.newMessageBuilder()
                // Set topic for the current message.
                .setTopic(topic)
                // Message secondary classifier of message besides topic.
                .setTag(tag)
                // Key(s) of the message, another way to mark message besides message id.
                .setKeys("test")
                .setBody(body)
                .build();
        try {
            final SendReceipt sendReceipt = producer.send(message);
            System.out.println("Send message successfully, messageId=" + sendReceipt.getMessageId());
        } catch (Throwable t) {
            System.err.println(t);
        }
        // Close the producer when you don't need it anymore.
        producer.close();
    }
}

【RocketMQ】RocketMQ 5.1.0版本Proxy集群模式部署实践

消费者:

package cn.xdf.xadd.rmq.test.newclient;

import org.apache.rocketmq.client.apis.ClientConfiguration;
import org.apache.rocketmq.client.apis.ClientException;
import org.apache.rocketmq.client.apis.ClientServiceProvider;
import org.apache.rocketmq.client.apis.consumer.ConsumeResult;
import org.apache.rocketmq.client.apis.consumer.FilterExpression;
import org.apache.rocketmq.client.apis.consumer.FilterExpressionType;
import org.apache.rocketmq.client.apis.consumer.PushConsumer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.util.Collections;

public class PushConsumerExample {
    private static final Logger log = LoggerFactory.getLogger(PushConsumerExample.class);

    public static void main(String[] args) throws ClientException, IOException, InterruptedException {
        final ClientServiceProvider provider = ClientServiceProvider.loadService();

        String endpoints = "172.24.30.192:28080";
        ClientConfiguration clientConfiguration = ClientConfiguration.newBuilder()
                .setEndpoints(endpoints)
                .build();
        String tag = "new-client-test";
        FilterExpression filterExpression = new FilterExpression(tag, FilterExpressionType.TAG);
        String consumerGroup = "new-client-test-group";
        String topic = "zhurunhua-test";
        PushConsumer pushConsumer = provider.newPushConsumerBuilder()
                .setClientConfiguration(clientConfiguration)
                // Set the consumer group name.
                .setConsumerGroup(consumerGroup)
                // Set the subscription for the consumer.
                .setSubscriptionExpressions(Collections.singletonMap(topic, filterExpression))
                .setMessageListener(messageView -> {
                    // Handle the received message and return consume result.
                    log.info("Consume message={}", messageView);
                    return ConsumeResult.SUCCESS;
                })
                .build();
        // Block the main thread, no need for production environment.
        Thread.sleep(Long.MAX_VALUE);
        // Close the push consumer when you don't need it anymore.
        pushConsumer.close();
    }
}

【RocketMQ】RocketMQ 5.1.0版本Proxy集群模式部署实践

以上,搭建成功,消息生产消费成功~

遇到的问题:

【RocketMQ】RocketMQ 5.1.0版本Proxy集群模式部署实践

找到rmq.proxy,logback.xml,批量修改对应的路径:

【RocketMQ】RocketMQ 5.1.0版本Proxy集群模式部署实践

将${brokerLogDir}批量替换成自定义的路径即可。

dashboard目前还不能采集到客户端的信息:

【RocketMQ】RocketMQ 5.1.0版本Proxy集群模式部署实践文章来源地址https://www.toymoban.com/news/detail-428956.html

到了这里,关于【RocketMQ】RocketMQ 5.1.0版本Proxy集群模式部署实践的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • RocketMQ集群4.9.2升级4.9.6版本

    本文主要记录生产环境短暂停机升级RocketMQ版本的过程         1.将生产环境MQ4.9.2集群同步到测试环境,并启动,确保正常运行。         2.参照4.9.2配置4.9.6集群         3.停掉4.9.2集群,启动4.9.6集群,测试确保正常运行。         4.停掉4.9.6集群,复制4.9.2集群的store存

    2024年02月15日
    浏览(65)
  • 使用 KubeSphere 部署高可用 RocketMQ 集群

    作者:老Z,云原生爱好者,目前专注于云原生运维,KubeSphere Ambassador。 Spring Cloud Alibaba 全家桶之 RocketMQ 是一款典型的分布式架构下的消息中间件产品,使用异步通信方式和发布订阅的消息传输模型。 很多基于 Spring Cloud 开发的项目都喜欢采用 RocketMQ 作为消息中间件。 Rock

    2023年04月15日
    浏览(35)
  • RocketMQ双主双从同步集群部署

    🎈 作者: 互联网-小啊宇 🎈 简介: CSDN 运维领域创作者、阿里云专家博主。目前从事 Kubernetes运维相关工作,擅长Linux系统运维、开源监控软件维护、Kubernetes容器技术、CI/CD持续集成、自动化运维、开源软件部署维护等领域。 🎈 博客首页:CSDN【互联网-小阿宇】 、阿里云

    2024年02月12日
    浏览(29)
  • 关于使用RocketMQ搭建多Master多Slave模式(同步)集群时遇到的问题

    1.1) 操作系统: Linux 虚拟机: VMware Workstation 16 Pro 、WSL   Openjdk Version : 11.0.19   使用 RocketMQ 进行 多 Master 多 Slave 模式(同步)集群的搭建 2)集群配置: # nameserver xxx.xxx.xxx.xxx rocketmq-nameserver1 xxx.xxx.xxx.xxx rocketmq-nameserver2  # broker #  在 VMware Workstation 上启动 xxx.xxx.xxx.xxx:10

    2024年02月16日
    浏览(40)
  • RocketMQ 主备自动切换模式部署

    目录 主备自动切换模式部署 Controller 部署​ Controller 嵌入 NameServer 部署​ Controller 独立部署​ Broker 部署​ 兼容性​ 升级注意事项​     该文档主要介绍如何部署支持自动主从切换的 RocketMQ 集群,其架构如上图所示,主要增加支持自动主从切换的 Controller 组件,其可以独立

    2024年02月14日
    浏览(30)
  • Kubernetes高可用集群二进制部署(五)kubelet、kube-proxy、Calico、CoreDNS

    Kubernetes概述 使用kubeadm快速部署一个k8s集群 Kubernetes高可用集群二进制部署(一)主机准备和负载均衡器安装 Kubernetes高可用集群二进制部署(二)ETCD集群部署 Kubernetes高可用集群二进制部署(三)部署api-server Kubernetes高可用集群二进制部署(四)部署kubectl和kube-controller-man

    2024年02月14日
    浏览(30)
  • Zabbix第二部分:基于Proxy分布式部署实现Web监控和Zabbix HA集群的搭建

    1)分担 server 的集中式压力; 2)解决多机房之间的网络延时问题。 agent -- proxy -- server zabbix-server :整个监控体系中最核心的组件,它负责接收客户端发送的报告信息,所有配置、 统计数据及操作数据都由它组织。 Database :所有配置信息和zabbix收集到的数据都存储在数据库

    2024年02月06日
    浏览(30)
  • docker-compose 搭建RocketMQ 5.1.0 集群(双主双从模式) | Spring Cloud 28

    关于更多 RocketMQ 的介绍请见官网:https://rocketmq.apache.org/zh/docs/ 网上关于 Docker 搭建 RocketMQ 单机集群的版本一般都是 4.X 。关于最新的 5.X 版本,官方给出的示例都是基于物理机虚拟机实现,不便于我们我们日常开发使用,而且官方镜像https://hub.docker.com/r/apache/rocketmq 中也没有

    2024年02月05日
    浏览(38)
  • 【RocketMQ】RocketMQ5.0新特性(一)- Proxy

    为了向云原生演进,提高资源利用和弹性能力,RocketMQ在5.0进行了架构的调整与升级,先来看新特性之一,增加了Proxy层。 计算存储分离 计算存储分离是一种分层架构,将计算层与存储层分开。 计算层指的是一些消耗计算资源的功能模块比如协议解析、消费管理等,存储指的

    2024年02月08日
    浏览(26)
  • Kubernetes集群部署与实践

    本博客链接:https://security.blog.csdn.net/article/details/128840528 部署Kubernetes集群至少需要3台服务器,其中至少要有1个服务器做master节点,至少要有1个服务器做node节点,且节点名称是唯一的。 当集群中只有一个master节点时,如果其出现了故障,会导致Kubernetes的控制平面完全失效。

    2023年04月08日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包