iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >微服务架构设计RocketMQ基础及环境整合的方法是什么
  • 382
分享到

微服务架构设计RocketMQ基础及环境整合的方法是什么

2023-06-25 11:06:25 382人浏览 八月长安
摘要

本篇内容主要讲解“微服务架构设计RocketMQ基础及环境整合的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“微服务架构设计RocketMQ基础及环境整合的方法是什么”吧!概述&

本篇内容主要讲解“微服务架构设计RocketMQ基础及环境整合的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“微服务架构设计RocketMQ基础及环境整合的方法是什么”吧!

概述&选型

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

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

支持事务型消息(消息发送和DB操作保持两方的最终一致性,rabbitmq和kafka不支持)

支持结合rocketmq的多个系统之间数据最终一致性(多方事务,二方事务是前提)

支持18个级别的延迟消息(rabbitmq和kafka不支持)

支持指定次数和时间间隔的失败消息重发(kafka不支持,rabbitmq需要手动确认)

支持consumer端tag过滤,减少不必要的网络传输(rabbitmq和kafka不支持)

支持重复消费(rabbitmq不支持,kafka支持)

单机安装配置

工欲善其事必先利其器,要想深入了解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

微服务架构设计RocketMQ基础及环境整合的方法是什么

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

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

微服务架构设计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基础及环境整合的方法是什么

启动多个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:9876brokerClusterName = DefaultClusterbrokerName = broker-abrokerId = 0deleteWhen = 04fileReservedTime = 48brokerRole = SYNC_MASTERflushDiskType = ASYNC_FLUSHlistenPort = 10911storePathRootDir = /app/rocketmq/store-a

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

namesrvAddr = 192.168.100.43:9876;192.168.100.44:9876brokerClusterName = DefaultClusterbrokerName = broker-bbrokerId = 1deleteWhen = 04fileReservedTime = 48brokerRole = SLAVEflushDiskType = ASYNC_FLUSHlistenPort = 11011storePathRootDir = /app/rocketmq/store-b

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

namesrvAddr = 192.168.100.43:9876;192.168.100.44:9876brokerClusterName = DefaultClusterbrokerName = broker-bbrokerId = 0deleteWhen = 04fileReservedTime = 48brokerRole = SYNC_MASTERflushDiskType = ASYNC_FLUSHlistenPort = 10911storePathRootDir = /app/rocketmq/store-b

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

namesrvAddr = 192.168.100.43:9876;192.168.100.44:9876brokerClusterName = DefaultClusterbrokerName = broker-abrokerId = 1deleteWhen = 04fileReservedTime = 48brokerRole = SLAVEflushDiskType = ASYNC_FLUSHlistenPort = 11011storePathRootDir = /app/rocketmq/store-a

然后分别使用如下命令启动两台服务器的主节点和从节点

nohup sh bin/mqbroker -c conf/broker-master.properties &
nohup sh bin/mqbroker -c conf/broker-slave.properties &

这样一个高可用的RockerMQ集群就搭建好了,我们登陆可视化运维管理界面查看集群状态,集群正常启动。

微服务架构设计RocketMQ基础及环境整合的方法是什么

重要参数说明

本节主要是对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 进入控制台界面,效果如下

微服务架构设计RocketMQ基础及环境整合的方法是什么

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

@Componentpublic 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)@SpringBootTestpublic class MessageProduceTest {    @Autowired    private MessageProduce messageProduce;    @Test    public void testSendMessage() {        messageProduce.sendMessage("test-topic","Hello,JAVA日知录");    }}

测试

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

微服务架构设计RocketMQ基础及环境整合的方法是什么

到此,相信大家对“微服务架构设计RocketMQ基础及环境整合的方法是什么”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: 微服务架构设计RocketMQ基础及环境整合的方法是什么

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 微服务架构设计RocketMQ基础及环境整合的方法是什么
    本篇内容主要讲解“微服务架构设计RocketMQ基础及环境整合的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“微服务架构设计RocketMQ基础及环境整合的方法是什么”吧!概述&...
    99+
    2023-06-25
  • 微服务架构设计RocketMQ基础及环境整合
    目录概述&选型单机安装配置双机主从高可用搭建启动多个NameServer 和 Broker重要参数说明可视化管理平台SpringBoot整合RocketMQ引入组件rocke...
    99+
    2024-04-02
  • java Dubbo架构整体设计方法是什么
    这篇文章主要介绍“java Dubbo架构整体设计方法是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“java Dubbo架构整体设计方法是什么”文章能帮助大家解决问题。一、Dubbo调用关系说...
    99+
    2023-07-06
  • Kubernetes存储的设计与基本架构方法是什么
    这篇文章主要讲解了“Kubernetes存储的设计与基本架构方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Kubernetes存储的设计与基本架构...
    99+
    2024-04-02
  • 云服务器基础架构是什么样的
    硬件方面,云服务器通常采用英特尔至强可扩展处理器,以及英特尔8000处理器、512GB内存和160GB SSD硬盘等硬件组成的基础架构。英特尔至强处理器是目前最先进的服务器处理器之一,可以提供高性能、高可靠性和高能效比,并支持多种操作系统和...
    99+
    2023-10-28
    架构 服务器 基础
  • 亚马逊云服务器基础架构是什么样的
    亚马逊AWS EC2 云计算服务:AWS EC2是亚马逊云平台上的EC2实例,是一种可扩展、可伸缩的计算服务。AWS EC2可以提供多种计算服务,如计算、存储、数据库、分析等。它支持多种计算引擎和编程语言,并提供了丰富的资源管理和监控工具...
    99+
    2023-10-27
    亚马逊 架构 服务器
  • 架设web服务器的需求和环境是什么
    架设Web服务器需要以下需求和环境:1. 硬件需求:需要一台服务器或者虚拟主机,具备足够的处理器、内存、存储空间和网络带宽,以满足W...
    99+
    2023-05-13
    架设web服务器 服务器
  • selenium环境搭建及基本元素定位的方法是什么
    今天小编给大家分享一下selenium环境搭建及基本元素定位的方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、s...
    99+
    2023-07-05
  • springboot整合quartz定时任务框架的方法是什么
    今天小编给大家分享一下springboot整合quartz定时任务框架的方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下...
    99+
    2023-06-26
  • SpringBoot项目多层级多环境yml设计的方法是什么
    本篇内容介绍了“SpringBoot项目多层级多环境yml设计的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!需求场景基础设施模块...
    99+
    2023-07-05
  • 云服务器ecs基础概念镜像设计方案是什么
    镜像设计:镜像设计是将多个云服务器应用程序镜像打包成一个单独的文件的过程。通过使用镜像设计,用户可以在不同的云服务器上创建和部署应用程序,而无需为每个应用程序购买和管理所有基础设施。 服务器虚拟化:服务器虚拟化是将多个物理服务器虚拟成一个...
    99+
    2023-10-27
    镜像 设计方案 概念
  • OpenStack云平台Train版搭建与基础环境准备的方法是什么
    这篇文章主要介绍了OpenStack云平台Train版搭建与基础环境准备的方法是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇OpenStack云平台Train版搭建与基础环境准备的方法是什么文章都会有所收...
    99+
    2023-07-05
  • 云服务器配置java环境设置方法是什么样的
    在云服务器上配置 Java 环境需要以下步骤: 1. 下载 Java 首先需要下载适合你的操作系统的 Java 安装包,可以从官网下载或者使用命令行下载。例如,如果你的操作系统是 Ubuntu,可以使用以下命令下载 Java: sudo...
    99+
    2023-10-26
    服务器配置 环境 方法
  • web服务器架设的方法是什么
    Web服务器架设的方法可以分为以下几步:1. 选择适合自己的操作系统,如Windows、Linux等。2. 安装Web服务器软件,如...
    99+
    2023-06-08
    web服务器架设 web服务器 服务器
  • web服务器的架设方法是什么
    架设Web服务器的方法如下:1.选择合适的服务器操作系统,如Windows Server、Linux等。2.安装Web服务器软件,如...
    99+
    2023-06-10
    web服务器的架设 web服务器 服务器
  • 私服服务器架设的方法是什么
    私服服务器架设的方法可以分为以下几个步骤:1. 选择服务器:选择一台性能稳定、网络速度快的服务器,可以选择自己架设服务器或者租用云服...
    99+
    2023-05-21
    私服服务器架设 服务器
  • Go语言从单体服务到微服务设计方法是什么
    这篇文章主要介绍“Go语言从单体服务到微服务设计方法是什么”,在日常操作中,相信很多人在Go语言从单体服务到微服务设计方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Go语言从单体服务到微服务设计方法...
    99+
    2023-07-05
  • 架设邮件服务器的方法是什么
    架设邮件服务器的方法如下:1.选择合适的邮件服务器软件,例如Postfix、Exim、Sendmail等。2.安装邮件服务器软件,根...
    99+
    2023-06-17
    架设邮件服务器 服务器
  • php主机空间服务器环境搭建及配置的方法是什么
    1. 安装Apache服务器:从官网下载Apache服务器,解压到本地,配置httpd.conf文件,启动Apache服务器。2. ...
    99+
    2023-05-31
    php主机空间 主机 空间
  • 大型网站背后的高性能系统架构设计方法是什么
    本文小编为大家详细介绍“大型网站背后的高性能系统架构设计方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“大型网站背后的高性能系统架构设计方法是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1. 性能...
    99+
    2023-06-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作