RocketMQ .NET

RocketMQ 是一款由阿里巴巴集团开发并开源给Apache软件基金会的分布式消息及流处理平台。以其高吞吐量、低延迟、高可用性等特点而广受欢迎。支持Java,C++, Python, Go, .NET等。

异步解耦:可以实现上游和下游业务系统的松耦合设计,使得服务部分节点异常不会影响到核心交易系统的正常运转。在电商、金融等分布式系统中,这种解耦设计尤为重要。
削峰填谷:在如秒杀、大促等大型活动中,系统会面临巨大的流量冲击。RocketMQ利用其高性能的消息处理能力,可以有效地应对这种流量冲击,保证系统的稳定运行。
顺序消息:支持顺序消息(分区有序),可以确保消息的先进先出。这在交易系统中的订单创建、支付、退款等流程中尤为重要,因为这些流程对消息的顺序有严格要求。
分布式事务消息:支持分布式事务消息,可以保证分布式事务的强一致性。这在涉及多个服务的分布式系统中非常有用,可以确保数据的一致性和完整性。

RocketMQ优点
高吞吐量和低延迟:能够处理大规模消息流,并提供低延迟的消息传递。这使得它非常适合处理高并发的应用场景,如电子商务和金融交易系统。
可靠性:具有高度可靠的消息传递机制。它支持消息持久化和复制,确保消息不会丢失,并能够在故障发生时进行自动恢复。
分布式扩展:支持水平扩展,可以方便地添加新的消息生产者和消费者来应对负载增加的情况。
易于部署:提供开箱即用的部署方式,非常适合在分布式系统中使用。

RocketMQ架构
在这里插入图片描述
生产者(Producer)
用于产生消息的运行实体,通常集成在业务系统的上游。
主题(Topic)
消息传输和存储的分组容器,内部由多个队列组成。
队列(MessageQueue)
消息传输和存储的实际单元容器,类似于其他消息队列中的分区。
消息(Message)
RocketMQ 的最小传输单元,具备不可变性。
消费者分组(ConsumerGroup)
发布订阅模型中定义的独立的消费身份分组,用于统一管理多个消费者。
消费者(Consumer)
消费消息的运行实体,集成在业务系统的下游。
订阅关系(Subscription)
发布订阅模型中消息过滤、重试、消费进度的规则配置。

部署RocketMQ(docker)

安装 Docker:

#debiancurl -fsSL https://get.docker.com -o get-docker.shsudo sh get-docker.sh

拉取 RocketMQ 镜像:

使用以下命令从 Docker Hub 拉取最新的 RocketMQ 镜像:

docker pull apache/rocketmq:latest

启动 RocketMQ NameServer:

RocketMQ 的 NameServer 是负责管理所有 Broker 节点的目录服务。可以使用以下命令启动 NameServer:

docker run -d --name rmqnamesrv -p 9876:9876 apache/rocketmq:latest sh mqnamesrv
```bash
## 启动 RocketMQ Broker:
RocketMQ 的 Broker 负责存储消息并处理生产者和消费者的请求。使用以下命令启动 Broker:```bash
docker run -d --name rmqbroker --link rmqnamesrv:namesrv -e "NAMESRV_ADDR=namesrv:9876"   -e "BROKER_NAME=broker-a"    -e "BROKER_ID=0"    -e "AUTO_CREATE_TOPIC_ENABLE=true"    -e "AUTO_CREATE_SUBSCRIPTION_GROUP=true"    -p 10911:10911 -p 10909:10909 apache/rocketmq:latest sh mqbroker

验证
查看 NameServer 日志:

docker logs -f rmqnamesrv

查看 Broker 日志:

docker logs -f rmqbroker

使用 RocketMQ Console:

如果需要可视化管理 RocketMQ,可以运行 RocketMQ Console:

docker pull styletang/rocketmq-console-ng
docker run -d -p 8080:8080 --link rmqnamesrv:namesrv -e "JAVA_OPTS=-Drocketmq.namesrv.addr=namesrv:9876" styletang/rocketmq-console-ng

在这里插入图片描述
在这里插入图片描述

总结

# 拉取 RocketMQ 镜像
docker pull apache/rocketmq:latest# 启动 NameServer
docker run -d --name rmqnamesrv -p 9876:9876 apache/rocketmq:latest sh mqnamesrv# 启动 Broker
docker run -d --name rmqbroker --link rmqnamesrv:namesrv -e "NAMESRV_ADDR=namesrv:9876" -p 10911:10911 -p 10909:10909 apache/rocketmq:latest sh mqbroker# 启动 RocketMQ Console
docker pull styletang/rocketmq-console-ng
docker run -d -p 8080:8080 --link rmqnamesrv:namesrv -e "JAVA_OPTS=-Drocketmq.namesrv.addr=namesrv:9876" styletang/rocketmq-console-ng

如果是外网环境
run Broker 外网IP

mkdir -p /usr/data/rocketMQ/data/broker/logs
mkdir -p /usr/data/rocketMQ/data/broker/store
mkdir -p /usr/data/rocketMQ/data/broker/conf/

broket.conf

brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
namesrvAddr = 外网ip:9876
brokerIP1 = 外网ip
autoCreateTopicEnable=true
docker run -p 0.0.0.0:10911:10911 -p 0.0.0.0:10909:10909 -d -v /usr/data/rocketMQ/data/broker/logs:/root/logs -v /usr/data/rocketMQ/data/broker/store:/root/store -v /usr/data/rocketMQ/data/broker/conf/broker.conf:/opt/rocketmq/conf/broker.conf --name rmqbroker --link rmqnamesrv:namesrv -e "NAMESRV_ADDR=namesrv:9876" -e "MAX_POSSIBLE_HEAP=200000000" -e "autoCreateTopicEnable=true" rocketmqinc/rocketmq sh mqbroker -c /opt/rocketmq/conf/broker.conf

在这里插入图片描述

.NET

NuGet NewLife.RocketMQ

在这里插入图片描述

Producer

	//mainXTrace.UseConsole();var producer = new Producer{NameServerAddress = "x.x.x.x:9876",Topic = "t0529"};try{producer.Start();// 发送一条测试消息,以确保 Topic 被创建for (var i = 0; i < 10; i++){var str = "mqm" + i;//var str = Rand.NextString(1337);var sr = producer.Publish(str, "TagA");}}catch (Exception ex){Console.WriteLine($"Exception: {ex.Message}");}finally{producer.Stop();}

在这里插入图片描述

Consumer

 var consumer = new Consumer{Topic = "t0529",Group = "test",NameServerAddress = "x.x.x.x:9876",FromLastOffset = false,//SkipOverStoredMsgCount = 0,//BatchSize = 20,Log = XTrace.Log,ClientLog = XTrace.Log,};consumer.OnConsume = OnConsume;consumer.Configure(MqSetting.Current);consumer.Start();_consumer = consumer;

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/18814.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小红书图文笔记怎么做?纯干货!

小红书图文笔记的制作是一门艺术&#xff0c;它需要结合精美的图片和有价值的内容&#xff0c;以吸引和留住用户的注意力。伯乐网络传媒给大家分享制作小红书图文笔记的干货指南&#xff0c;包括准备、制作、发布和优化的各个环节。 一、准备阶段 确定目标受众&#xff1a;找到…

说明 1px、1em、1rem、1vw、1vh 的区别

说明 1px、1em、1rem、1vw、1vh 的区别 单位&#xff08;units&#xff09;pxemremvwvh相对单位/绝对单位绝对相对相对相对相对含义像素相对于父元素字体大小&#xff08;倍数&#xff09;相对于根元素字体大小&#xff08;倍数&#xff09;相对于视口的宽度&#xff08;百分之…

EM算法最通俗理解

期望最大化算法&#xff08;EM&#xff09;是机器学习领域非常重要的算法之一&#xff0c;但作为一个工科生&#xff0c;每次看其推导过程&#xff0c;总会怀疑自己的智商是不是不够用&#xff0c;为什么每一步推导都能看懂&#xff0c;但放到一起就崩了呢&#xff1f;可能还是…

【NumPy】权威指南:使用NumPy的percentile函数进行百分位数计算

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

python爬虫之JS逆向——爬虫基础

目录 一、http协议 二、前端三剑客 1 HTML 标签 标签举例 2 CSS CSS的引入方式 选择器 属性操作 3 JS基础 JS的引入方式 JS的基本语法 变量赋值 数据类型 运算符 分支语句 循环语句 函数 JS的内置方法 字符串的内置方法 数组的内置方法 内置高阶方法 4 …

研学活动报名二维码怎么制作?

在组织研学活动时&#xff0c;老师们经常面临报名流程繁琐、信息收集不全面、统计工作耗时等问题&#xff1f;如何高效地管理学生的报名信息&#xff0c;确保活动顺利进行呢&#xff1f; 现在我们有了更多的选择。老师们可以快速制作出研学活动的研学活动报名二维码怎么制作&am…

【网络协议Http】Http中get,post,put,delete区别

Http协议 超文本传输协议&#xff08;Hypertext Transfer Protocol&#xff0c;HTTP&#xff09;是一个简单的请求-响应协议&#xff0c;它通常运行在TCP之上。 【参考】 GET && POST 对比 关于tcp数据包&#xff1a;对于GET方式的请求&#xff0c;浏览器会把http hea…

Android 11 AudioPolicyService 启动流程

AudioPolicyService在init进程中启动&#xff0c;源码路径&#xff1a;frameworks/av/media/audioserver/audioserver.rc service audioserver /system/bin/audioserverclass coreuser audioserver# media gid needed for /dev/fm (radio) and for /data/misc/media (tee)grou…

DETR整体模型结构解析

DETR流程 Backbone用卷积神经网络抽特征。最后通过一层1*1卷积转化到d_model维度fm&#xff08;B,d_model,HW&#xff09;。 position embedding建立跟fm维度相同的位置编码(B&#xff0c;d_model,HW&#xff09;。 Transformer Encoder,V为fm&#xff0c;K&#xff0c;Q为fm…

非量表题如何进行信效度分析

效度是指设计的题确实在测量某个东西&#xff0c;一般问卷中使用到。如果是量表类的数据&#xff0c;其一般是用因子分析这种方法去验证效度水平&#xff0c;其可通过因子分析探究各测量量表的内部结构情况&#xff0c;分析因子分析得到的内部结构与自己预期的内部结构进行对比…

自学之路Flutter使用Provider进行状态管理

使用前的准备 首先在pubspec.yaml中配置&#xff0c;然后pub get,等待安装完成 我们首先创建两个比较简单的控制器&#xff0c;测试页面跳转之间的数据传递。 import package:flutter/material.dart;void main() {runApp(const MyApp()); }class MyApp extends StatelessWid…

python接口自动化之会话保持

&#x1f366; 会话保持-token 有的网站登录需要token鉴权&#xff0c;是啥意思呢&#xff0c;现在有两个接口&#xff0c;一个接口是登录&#xff0c;一个接口是提交订单&#xff0c;那你怎么保证&#xff0c;提交登录这个用户是登录状态呢。登录成功的接接口会在response里面…

大模型预训练结果到底是什么?

近日参加一个线下 AI 交流会议&#xff0c;会上有个非本行业的老师提问&#xff1a;“大家说的训练好的大模型到底是什么&#xff1f;是像 Word 软件一样可以直接使用的程序吗&#xff1f;” 这个问题看似简单&#xff0c;却一下把我问住了。的确&#xff0c;我们这些身处 AI 领…

Kafka原生API使用Java代码-生产者-发送消息

文章目录 1、生产者发送消息1.1、使用EFAK创建主题my_topic31.2、根据kafka官网文档写代码1.3、pom.xml1.4、KafkaProducer1.java1.5、使用EFAK查看主题1.6、再次运行KafkaProducer1.java1.7、再次使用EFAK查看主题 1、生产者发送消息 1.1、使用EFAK创建主题my_topic3 1.2、根…

STM32 OTA需要注意问题

一、OTA设计思路&#xff08;问题&#xff09; 1、根据stm32f405 flash分布&#xff0c;最初将flash划分为四个区域&#xff0c;分别是Bootloader、APP1、APP2、参数区&#xff0c;设备上电后&#xff0c;进入Bootloader程序&#xff0c;判断OTA参数&#xff0c;根据参数来确定…

APP逆向之调试的开启

很基础的一个功能设置&#xff0c;大佬轻喷。 背景 在开始进行对APP逆向分析的时候&#xff0c;需要对APP打开调试模式。 打开调试的模式有多种方式可以通过直接改包方式也可以通过借助第三方工具进行打开调试模式。 下面就整理下这个打开调试模式的一些方式。 改包修改模…

Java面试题分享-敏感词替换 java 版本

入职啦最近更新了一些后端笔试、面试题目&#xff0c;大家看看能快速实现吗&#xff1f; 关注 入职啦 微信公众号&#xff0c;每日更新有用的知识&#xff0c;Python&#xff0c;Java&#xff0c;Golang&#xff0c;Rust&#xff0c;javascript 等语言都有 不要再用replaceAll做…

npm获取yarn在安装依赖时 git://github.com/user/xx.git 无法访问解决方法 -- 使用 insteadOf设置git命令别名

今天在使用一个node项目时突然遇到 一个github的拉取异常&#xff0c;一看协议居然是git://xxx 貌似github早就不用这种格式了&#xff0c; 而是使用的gitgithub.com:xxx 这种或者https协议&#xff0c;解决方法&#xff1a; 使用insteadof设置git别名 url.<base>.inste…

DNF手游攻略:开荒必备攻略!

DNF手游马上就要开服了&#xff0c;今天给大家带来最完整的DNF手游入门教程。这篇攻略主要讲述了 DNF手游开服第一天要注意的事项&#xff0c;这是一个新手必备的技能书&#xff0c;可以让你在开服的时候&#xff0c;少走一些弯路&#xff0c;让你更快完成任务&#xff01;废话…

蓝牙Mesh模块多跳大数据量高带宽传输数据方法

随着物联网技术的飞速发展&#xff0c;越来越多的设备需要实现互联互通。蓝牙Mesh网络作为一种低功耗、高覆盖、易于部署的无线通信技术&#xff0c;已经成为物联网领域中的关键技术之一。在蓝牙Mesh网络中&#xff0c;节点之间可以通过多个跳数进行通信&#xff0c;从而实现大…