返回顶部
首页 > 资讯 > 后端开发 > Python >微服务架构设计RocketMQ基础及环境整合
  • 197
分享到

微服务架构设计RocketMQ基础及环境整合

2024-04-02 19:04:59 197人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录概述&选型单机安装配置双机主从高可用搭建启动多个NameServer 和 Broker重要参数说明可视化管理平台SpringBoot整合RocketMQ引入组件rocke

概述&选型

消息队列作为高并发系统的核心组件之一,能够帮助业务系统解构提升开发效率和系统稳定性。主要用于三种典型场景:应用解耦、流量消峰、消息分发。

目前主流的MQ主要是Rocketmq、kafkaRabbitMQ,Rocketmq相比于Rabbitmq、kafka具有主要优势特性有:

  • 支持事务型消息(消息发送和DB操作保持两方的最终一致性,rabbitmq和kafka不支持)
  • 支持结合rocketmq的多个系统之间数据最终一致性(多方事务,二方事务是前提)
  • 支持18个级别的延迟消息(rabbitmq和kafka不支持)
  • 支持指定次数和时间间隔的失败消息重发(kafka不支持,rabbitmq需要手动确认)
  • 支持consumer端tag过滤,减少不必要的网络传输(rabbitmq和kafka不支持)
  • 支持重复消费(rabbitmq不支持,kafka支持)

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

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

单机安装配置

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

解压安装
unzip rocketmq-all-4.7.0-bin-release.zip

启动 Name Server
> nohup sh bin/mqnamesrv &

查看 Name Server启动日志
> tail -f ~/logs/rocketmqlogs/namesrv.log

在这里插入图片描述

启动 Broker Server
> nohup sh bin/mqbroker -n localhost:9876 &

查看 Broker Server 启动日志
> tail -f ~/logs/rocketmqlogs/broker.log

在这里插入图片描述

单机情况下安装使用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,部署架构如下:

在这里插入图片描述

启动多个NameServer 和 Broker

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

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

192.168.100.43 机器上的broker-master.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

192.168.100.43 机器上的broker-slave.properties文件:


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

192.168.100.44 机器上的broker-master.properties文件:


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

192.168.100.44 机器上的broker-slave.properties文件:


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集群就搭建好了,我们登陆可视化运维管理界面查看集群状态,集群正常启动。

在这里插入图片描述

重要参数说明

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

namesrvAddr = 192.168.100.43:9876;192.168.100.44:9876
指定NameServer的地址,可以是多个。

brokerClusterName = DefaultCluster
Cluster地址,如果集群数量比较多,可以分成多个Cluster,每个Cluster供一个业务群使用。

brokerName = broker-a
Broker的名称,Master 和Slave 通过使用相同的 Broker 名称来表明相互关系,以说明某个Slave 是哪个Master 的 Slave。

brokerId = 1
一个Master可以有多个Slave,0表示Master,大于0的表示不同Slave的ID。

fileReservedTime = 48
在磁盘上保存消息的时长,单位是小时,自动删除超时的消息。

deleteWhen = 04
与 fileReservedTime 参数对应,表明在几点做消息删除动作,默认是凌晨4点。

brokerRole = SYNC_MASTER

brokerRole的可选参数有SYNC_MASTER,ASYNC_MASTER,SLAVE三种。SYNC 和ASYNC 表示MASTER 和SLAVE 之间同步消息的机制,SYNC的意思是当Slave 和 Master 的消息同步完成后再返回发送成功的状态。

flushDiskType = ASYNC_FLUSH

flushDiskType 表示刷盘策略,可选值有ASYNC_FLUSH 和 SYNC_FLUSH两种,分别代表同步刷盘和异步刷盘。同步情况下,消息只有真正写入磁盘才返回成功状态;异步情况下,消息写入page_cache后就返回成功状态。

listenPort = 11011
Broker监听的端口,一台服务器启动多个Broker,需要设置不同的监听端口避免端口冲突。

storePathRootDir = /app/rocketmq/store-a
存储消息以及配置信息的根目录。

可视化管理平台

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

下载
从github(https://github.com/apache/rocketmq-externals) 下载RocketMQ可视化管理工具 rocketmq-externals 的源码;

打包
下载完成后切换进rocketmq-console目录,使用Maven命令对其打包 mvn clean package -Dmaven.test.skip=true
打包完成后生成可执行文件rocketmq-console-ng-1.0.1.jar

运行
使用 java -jar rocketmq-console-ng-1.0.1.jar --server.port=8080 --rocketmq.config.namesrvAddr=xxxx.xxx.xxx.xxx:9876 命令启动

这里注意需要设置两个参数:
--server.port 为运行的这个WEB应用的端口,如果不设置的话默认为8080;
--rocketmq.config.namesrvAddr 为RocketMQ命名服务地址,若NameServer为集群则使用英文 ; 分割

访问
浏览器访问 xxx.xxx.xxx.xxx:8080 进入控制台界面,效果如下

在这里插入图片描述

SpringBoot整合RocketMQ

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

引入组件rocketmq-spring-boot-starter 依赖


<dependency>
	<groupId>org.apache.rocketmq</groupId>
	<artifactId>rocketmq-spring-boot-starter</artifactId>
	<version>2.1.0</version>
</dependency>

修改application.yml,添加RocketMQ相关配置


rocketmq:
  name-server: 192.168.100.43:9876;192.168.100.44:9876
  producer:
    group: test-group
    send-message-timeout: 3000

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

编写消息生产者 MessageProduce



@Component
public class MessageProduce {

    @Autowired
    private RocketMQtemplate rocketMQTemplate;

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

使用RocketMQTemplate发送消息

编写消息消费者 MessageConsumer


@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日知录");
    }
}

测试

先启动springboot应用,再执行测试用例。

在这里插入图片描述

以上就是微服务架构设计入门RocketMQ基础及环境整合的详细内容,更多关于微服务架构设计RocketMQ环境整合的资料请关注编程网其它相关文章!

--结束END--

本文标题: 微服务架构设计RocketMQ基础及环境整合

本文链接: https://lsjlt.com/news/155753.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 微服务架构设计RocketMQ基础及环境整合
    目录概述&选型单机安装配置双机主从高可用搭建启动多个NameServer 和 Broker重要参数说明可视化管理平台SpringBoot整合RocketMQ引入组件rocke...
    99+
    2024-04-02
  • 微服务架构设计RocketMQ基础及环境整合的方法是什么
    本篇内容主要讲解“微服务架构设计RocketMQ基础及环境整合的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“微服务架构设计RocketMQ基础及环境整合的方法是什么”吧!概述&...
    99+
    2023-06-25
  • 基于Sanic的微服务基础架构
    使用python做web开发面临的一个最大的问题就是性能,在解决C10K问题上显的有点吃力。有些异步框架Tornado、Twisted、Gevent 等就是为了解决性能问题。这些框架在性能上有些提升,但是也出现了各种古怪的问题难以解决。...
    99+
    2023-01-31
    架构 基础 Sanic
  • 微服务架构设计RocketMQ进阶事务消息原理详解
    目录前言RocketMQ事务流程概要RocketMQ事务流程关键实现基础配置引入组件添加配置发送半消息执行本地事务与回查消费消息测试总结前言 分布式消息选型的时候是否支持事务消息是一...
    99+
    2024-04-02
  • 基于微服务和Docker的PaaS云平台架构设计
      基于微服务架构和Docker容器技术的PaaS云平台建设目标是给我们的开发人员提供一套服务快速开发、部署、运维管理、持续开发持续集成的流程。平台提供基础设施、中间件、数据服务、云服务器等资源,开发人员只需要开发业务代码并提交到平台代码库...
    99+
    2023-06-03
  • 基于Go语言的微服务架构设计与实现
    随着云计算和容器化技术的快速发展,微服务架构已经成为了构建大型分布式系统的首选架构之一。微服务架构的核心理念是将复杂的单体应用拆分成一系列小而独立的服务,通过轻量级的通信方式进行交互,从而提高系统的可伸缩性、可靠性和可维护性。而Go语言作为...
    99+
    2023-11-20
    微服务 实现 架构设计
  • 一张图搞懂微服务架构设计
    前言 当前,微服务架构在很多公司都已经落地实施了,下面用一张图简要概述下微服务架构设计中常用组件。不能说已经使用微服务好几年了,结果对微服务架构没有一个整体的认知,一个只懂搬砖的程序员不是一个好码农!  流量入口Nginx 在上图中可以...
    99+
    2023-08-31
    微服务 java 架构
  • PHP 微服务架构的设计与实现
    php 微服务架构遵循单一职责、松散耦合、可扩展性、容错性原则,通过案例示范创建用户管理微服务。微服务通常部署在 docker 或 kubernetes 中,监控性能、可用性、错误和依赖...
    99+
    2024-05-08
    php 微服务架构 docker 用户注册
  • 亚马逊云服务器基础架构设置
    以下是亚马逊云服务器基础架构设置的一些常见问题及解答: 常见问题: - 您是否已经购买了AWS EC2实例? - 您需要哪种类型的AWS实例?例如:Elastic EZ Storage Server、Elastic MapReduce S...
    99+
    2023-10-27
    亚马逊 架构 服务器
  • 微服务之架构技术选型与设计
    本文主要介绍了架构技术选型与设计-微服务选型,Spring cloud 实现采用的技术,希望对您的学习有所帮助。架构技术选型与设计-DUBBODubbo,是阿里巴巴服务化治理的核心框架,并被广泛应用于阿里巴巴集团的各成员站点(阿里巴巴现在使...
    99+
    2023-06-05
  • spring cloud微服务分布式云架构 - 整合企业架构的技术点
    spring cloud本身提供的组件就很多,但我们需要按照企业的业务模式来定制企业所需要的通用架构,那我们现在需要考虑使用哪些技术呢?有spring cloud b2b2c电子商务需求的朋友可以加企鹅求求:三五三六二四七二五九下面我针对于...
    99+
    2023-06-05
  • VUE Axios与微服务架构:在微服务环境中进行网络请求
    ...
    99+
    2024-04-02
  • golang函数缓存与微服务架构的整合之道
    在 go 语言中,函数缓存使用 sync/cache 库实现,通过缓存函数调用及其结果,可显着提高微服务架构的性能,优势包括减少延迟、提高吞吐量和降低成本。 Go 语言函数缓存与微服务...
    99+
    2024-05-04
    golang 微服务 git 标准库
  • (二)spring cloud微服务分布式云架构 - 整合企业架构的技术点
    spring cloud本身提供的组件就很多,但我们需要按照企业的业务模式来定制企业所需要的通用架构,那我们现在需要考虑使用哪些技术呢?下面我针对于spring cloud微服务分布式云架构做了以下技术总结,希望可以帮助到大家:View:&...
    99+
    2023-06-05
  • 云服务器怎么搭建python环境变量管理系统框架架构设计
    搭建一个Python环境变量管理系统框架需要遵循以下步骤: 安装Python 9和Python 3 创建Python安装文件和依赖文件 为Python安装Python解释器,以及依赖库 创建用户和权限管理系统 添加用户和权限 实现系统初...
    99+
    2023-10-26
    管理系统 架构 环境变量
  • Golang在微服务架构中的设计与实现
    go语言中微服务的设计与实现可以遵循以下原则:定义明确的服务边界,实现松散耦合。利用grpc、rest api和channels实现微服务。将业务逻辑封装在接口中,通过明确定义的接口实现...
    99+
    2024-05-12
    golang 微服务 go语言
  • PHP 企业级应用微服务架构设计问答
    微服务架构使用 php 框架(如 symfony 和 laravel)来实现微服务,并遵循 restful 原则和标准数据格式来设计 api。微服务通过消息队列、http 请求或 grp...
    99+
    2024-05-07
    php 微服务 laravel docker
  • java开发微服务架构怎么设计消息队列
    本篇内容介绍了“java开发微服务架构怎么设计消息队列”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!消息队列的作用在微服务开发中我们经常会引...
    99+
    2023-06-25
  • PHP 微服务架构:设计、部署和治理的最佳实践
    微服务架构是一种流行的软件开发方法,它将应用程序分解为较小的、可独立部署的组件,称为微服务。PHP 是一种强大的编程语言,特别适合开发微服务架构。 微服务设计的最佳实践 单一职责原则:每个微服务应专注于单个功能或职责。 松耦合:微服务...
    99+
    2024-02-16
    PHP 微服务 架构 设计 部署
  • Golang技术在企业级微服务开发中的架构设计
    在企业级微服务开发中,golang 构架设计遵循分层体系,包括业务逻辑层、通信层和数据访问层。业务逻辑层包含特定于应用程序的逻辑;通信层负责微服务间的通信,通常使用 rest 或 grp...
    99+
    2024-05-11
    golang 微服务 mysql 数据访问 微服务开发
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作