Rocket mq

图1

rocket mq 的作用:消峰,异步,解耦。

producer 集群生产者相当于我们的订单服务集群,consumer集群服务消费集群相当于统计服务,每消费一个订单,服务加1;

broker 消息中间件的,中转消息存储消息的。name Servcer 就是去维护整个集群的状态,高可用的。很想dubbo里的注册中心zookeeper。

图2

 对于rocketmq来说,生产者和消费者都是客户端。自己是服务端。但是对于生产者消费者来说,自己是服务端,rocketmq是客户端。 

rocketmq-remoting 代码里包含了生产者与mq之间的远程之间的调用,rocketmq-common 代码里包含了一些消息相关的信息

其实从宏观来看就是一个,远程通讯,发送消息,储存消息的一个过程。

图3

启动服务。

图4

 统计页面。

图5

图6

状态

图7

状态;

路由 权限,6代表有所有的权限。相当于root

consumer。

图8

图9

图10

图11

启动测试。 默认一个topic 有4个队列。

图12

 图13

 broker 包含一个topioc。一个topioc包含多个queue

图14

33行,35行,37行都是准备工作(不重要)。

44行,45行拼接数据。  51行send方法是核心;

图15

默认支持4兆;

图16

图17

   154行注册到nameService

 

图18

图19

图20

 447行。尝试去获取

 

生产者从nameServer 中获取broker的地址信息,与broker建立连接,发送信息。457行从broker中的四个队列中选取一个队列来接受数据图23。

463行发送数据返回的结果;

图21

图22

605行远程调用,获取数据;

620行加入缓存。 

图23

通过63行这样一个函数来选的。简单的说轮询的方式 

图24

 

组装消息协议;

 

根据不同的方式进行发送消息。696行发送消息;

图25

 

发送整体流程;

 

 图26

图27

开源的只支持这种固定的长度。

图28

 

 

如果设置为3就是 10s;  原理和普通消息的原理是一样的。 场景如果发送到第三方的机器挂了,短时间不能恢复的情况下,适合使用这种场景;

图29

示例:

 

 

### C# 集成 RocketMQ 示例教程 #### 创建项目环境 为了在C#应用程序中集成RocketMQ,首先需要设置开发环境。确保安装了.NET SDK以及Visual Studio或其他支持的IDE。 #### 添加依赖项 通过NuGet包管理器向项目添加`Apache.RocketMQ.Client.CSharp`库: ```shell dotnet add package Apache.RocketMQ.Client.CSharp ``` 此命令会自动下载并配置所需的类库文件[^1]。 #### 编写生产者代码 下面是一个简单的消息发送者的实现方式: ```csharp using System; using Apache.RocketMQ.Client.Producer; using Apache.RocketMQ.Common.Message; class ProducerExample { static void Main(string[] args) { // 初始化Producer实例 var producer = new DefaultMQProducer("example_producer_group"); try { // 启动Producer服务 producer.Start(); string topicName = "TestTopic"; int messageCount = 5; // 发送的消息数量 Console.WriteLine($"Begin to send {messageCount} messages..."); for (int i = 0; i < messageCount; ++i) { Message msg = new Message(topicName, $"Hello RocketMQ #{i}".ToByteArray()); SendResult sendResult = producer.Send(msg); Console.WriteLine($"Send Result: {sendResult.ToString()}"); } } finally { producer.Shutdown(); // 关闭资源释放连接 } } } ``` 这段程序展示了如何初始化一个Producer对象并向指定主题发布多条消息。 #### 实现消费者逻辑 接下来定义接收端处理流程如下所示: ```csharp using System; using Apache.RocketMQ.Client.Consumer.Listener; using Apache.RocketMQ.Client.Consumer.PushConsumer; using Apache.RocketMQ.Common.Protocol.Heartbeat; using Apache.RocketMQ.Common.Message; class ConsumerExample { public static void Main(string[] args) { // 构建PushConsumer实例 IPushConsumer consumer = MQClientInstance.GetDefault().CreatePushConsumer( "example_consumer_group", null, null); try { consumer.RegisterMessageListener(new ConsumeMessageBatchHook((msgs, context) => { foreach (var msg in msgs) { Console.WriteLine($"Received message: {System.Text.Encoding.UTF8.GetString(msg.Body)}"); } return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; })); consumer.Subscribe("TestTopic", "*"); // 订阅特定的主题 consumer.Start(); Console.WriteLine("Press any key to exit."); Console.ReadKey(); } catch (Exception e) { Console.WriteLine(e); } finally { consumer.Shutdown(); } } } ``` 上述脚本注册了一个监听函数用于处理接收到的数据流,并订阅了之前提到过的测试话题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值