easynetq使用
创始人
2025-06-01 14:25:54
0

安装rabbitmq

参考

快速开始

官网

新建三个项目

Messages 类库项目
Publisher 控制台项目
Subscriber 控制台项目
两个控制台项目安装EasyNetQ
在这里插入图片描述

添加消息

Messages下新建TextMessage.cs

namespace Messages
{public class TextMessage{/// /// 要发送的文本消息/// public string Text { get; set; }}
}

两个控制台项目添加对于Messages的引用
在这里插入图片描述

编写发布者

修改Publisher下的代码

using EasyNetQ;
using Messages;
using System;namespace ConsoleApp1
{internal class Program{static void Main(string[] args){//host=192.168.1.1;port=5672;virtualHost=MyVirtualHost;username=MyUsername;password=MyPassword;requestedHeartbeat=10using (var bus = RabbitHutch.CreateBus("host=10.10.90.139;port=5672;username=wjl;password=密码")){var input = String.Empty;Console.WriteLine("Enter a message. 'Quit' to quit.");while ((input = Console.ReadLine()) != "Quit"){bus.PubSub.Publish(new TextMessage { Text = input });Console.WriteLine("Message published!");}}}}
}

编写接收者

修改Subsciber下的代码

using EasyNetQ;
using Messages;
using System;namespace Subsciber
{internal class Program{static void Main(string[] args){//host=192.168.1.1;port=5672;virtualHost=MyVirtualHost;username=MyUsername;password=MyPassword;requestedHeartbeat=10using (var bus = RabbitHutch.CreateBus("host=10.10.90.139;port=5672;username=wjl;password=密码")){bus.PubSub.Subscribe("test", HandleTextMessage);Console.WriteLine("Listening for messages. Hit  to quit.");Console.ReadLine();}}static void HandleTextMessage(TextMessage textMessage){Console.ForegroundColor = ConsoleColor.Red;Console.WriteLine("Got message: {0}", textMessage.Text);Console.ResetColor();}}
}

先启动订阅者,在启动发布者,启动报错了,需要安装Newtonsoft.json
在这里插入图片描述

版本控制消息

Messages下新建MyMessageV2.cs
Messages安装EasyNetQ

using EasyNetQ.MessageVersioning;namespace Messages
{public class MyMessageV2 : TextMessage, ISupersede{public int Number { get; set; }}
}

新建VersioningSend控制台

using EasyNetQ;
using Messages;
using System;namespace VersioningSend
{internal class Program{static void Main(string[] args){/*当你发布一个消息,EasyNetQ通常为这个消息类型创建一个交换机,然后发布这个消息到这个交换机。订阅者创建队列,绑定到这个交换机,因此可以接收任何发布到这个交换机上的消息。当版本化的消息启用时,EasyNetQ将为每一个继承结构的版本化消息类型创建一个交换机,然后绑定这些交换机在一起。当你发布MyMessageV2消息时,这个消息被发送到MyMessageV2交换机上,并自动向上转发到MyMessage交换机。当消息被序列化时,EasyNetQ会存储这个消息类型名称到这个消息的Type属性中。这个元数据会连同消息一起发送到任何订阅者,订阅者然后能够用这个元数据来反序列化这个消息。当版本化消息启用时,EasyNetQ也将存储所有被取代的消息类型到这个消息Header属性中。订阅者将用这个属性查找第一个可用的消息类型去序列化,就算终结点没有最新版本的消息,只要有一个版本,它就能够被反序列化和被处理。*///host=192.168.1.1;port=5672;virtualHost=MyVirtualHost;username=MyUsername;password=MyPassword;requestedHeartbeat=10using (var bus = RabbitHutch.CreateBus("host=10.10.90.139;port=5672;username=wjl;password=wujialiang", service =>{service.EnableMessageVersioning();})){var input = String.Empty;Console.WriteLine("Enter a message. 'Quit' to quit.");while ((input = Console.ReadLine()) != "Quit"){bus.PubSub.Publish(new MyMessageV2 { Text = input, Number = 2 });Console.WriteLine("Message published!");}}}}
}

新建VersioningReceiver控制台

using EasyNetQ;
using Messages;
using System;namespace VersioningReceiver
{internal class Program{static void Main(string[] args){//host=192.168.1.1;port=5672;virtualHost=MyVirtualHost;username=MyUsername;password=MyPassword;requestedHeartbeat=10using (var bus = RabbitHutch.CreateBus("host=10.10.90.139;port=5672;username=wjl;password=wujialiang")){bus.PubSub.Subscribe("test", HandleTextMessage);Console.WriteLine("Listening for messages. Hit  to quit.");Console.ReadLine();}}static void HandleTextMessage(MyMessageV2 textMessage){Console.ForegroundColor = ConsoleColor.Red;Console.WriteLine("Got message: {0},number:{1}", textMessage.Text,textMessage.Number);Console.ResetColor();}}
}

启动VersioningSend以及VersioningReceiver和Subsciber,发送一条消息
在这里插入图片描述

版本消息指南

如果不能通过扩展原始消息类型去实现,那么它就不是一个新版本的消息。它是一个新的消息类型。
如果你不确定,宁可去创建一个新的消息类型,而不是去版本化一个已存在的消息。
被版本化的消息,不应该在Request/Response中做为消息类型去使用,Request和Request是不同的,即使V2扩展与V1也是不同的。
版本化的消息不应用于Send/Receive,因为这是有针对性的发送,因为发送者和接受者之间是有依赖的。

版本化消息支持已经在发布-订阅场景中被开发和测试过。它没有在send-receive 或者 request-response场景中被测试过。在发布-订阅之外其他模式中,风险自负。
版本化消息支持这个时候还没有扩展到未来的publish场景下。额外的工作已经计划开启了,但是由于潜在的中断可能发生,项目所有者和社区需要一些必要的讨论。

相关内容

热门资讯

走进小城看消费丨江西资溪:低碳...   夏日时节下午4点,江西省抚州市资溪县大觉山景区漂流终点依然热闹。来自南昌的游客余鑫漂流结束后没有...
【中原晨会0625】市场分析专... 来源:市场资讯 (来源:中原证券研究所) 本期重点研报目录 【中原策略】市场分析:电子半导体领涨 ...
南向资金连买4日!低费率+可月... 6月25日早盘,港股红利资产震荡整理。截至11时14分,港股红利低波ETF招商(520550)下跌0...
618成交破百万!紫荆花用一套... 一年一度的618年中大促,是消费市场的晴雨表,也是品牌间最激烈的角力场。当各大品牌在直播间里铆足了劲...
原创 黄... 2026年6月25日的国际金价已经从前期的5500美元高点跌到4200美元下方,累计跌幅超过22%,...
英伟达CEO:Vera Rub... 截至9:38,中证半导体材料设备主题指数(931743)涨2.36%创新高;权重股中,中微公司涨3....
再被催债16亿!“钢铁大王”戴... 澎湃新闻记者 贺梨萍 因“铁本事件”入狱五年的戴国芳重返钢铁行业,但他并没有完成从阶下囚再到“钢铁大...
周三原油价格下跌 随着美国和伊朗在和平谈判中取得进展,越来越多的油轮公开穿越霍尔木兹海峡,原油在战时的价格上涨已经蒸发...
这种蛋白是大脑衰老的开关 这种蛋白是大脑衰老的开关 清晨,假设一位五十岁左右的王女士发现自己常常把手机放在熟悉的抽屉里又找不到...
信通院牵头算力Token出海生... 盘面上,截至11:04,中证科创创业50指数(931643)涨1.68%,创历史新高;权重股中,芯原...
海外 774 亿营收背后:日本... 文 | 游戏价值论 6月23日,彭博社报道了腾讯正在围绕出售多家日本游戏工作室少数股权开展谈判,包...
餐饮“抢人”大战:把店开到公交... 作者 |餐饮老板内参 内参君 医院、公交站、演唱会…餐饮品牌,正在无孔不入 在北京儿童医院,肯德基...
快讯 | 外资扫货!陈翊庭:港... 港交所行政总裁陈翊庭在接受《中国证券报》专访时指出,国际资本对中国资产的看法已彻底扭转,布局中国市场...
2777.77元!A股“股王”... 25日早盘,昨天创下历史新高的A股“股王”联讯仪器,今天上午继续走强,盘中股价再度刷新历史新高。 截...
原创 今... 欧洲自己的媒体直接下结论,欧盟衰退躲不掉,内部分裂拦不住,现在就连欧洲顶尖工业巨头,都偷偷在用中国的...
黄仁勋股东大会放言:本轮AI基... 在当地时间6月24日的英伟达(NVDA.O)2026年度股东大会上,股东批准了该公司全部10名董事会...
国际油价大跌 新华社消息, 纽约原油期货主力合约价格24日盘中跌破每桶70美元,为伊朗战事爆发以来首次。 市场分析...
马云带队插秧,什么信号? 一场别开生面的“务农”,让外界看到了一个不一样的阿里巴巴。 近日,阿里巴巴合伙人、高德董事长刘振飞在...
全球最大产能,最高丰度达99.... 本文转自【科技日报】; 6月23日,高丰度硼-10同位素技术暨产业化成果发布会在山东省东营市举办,全...
黄金大跳水!金饰克价年内暴跌近... 25日,现货黄金盘中震荡,截至发稿,报3985.070美元/盎司,跌0.17%。 当地时间24日,...