RabbitMQ学习系列二:.net 环境下 C#代码使用 RabbitMQ 消息队列

一、理论:

.net环境下,C#代码调用RabbitMQ消息队列,本文用easynetq开源的.net Rabbitmq api来实现。

EasyNetQ 是一个易于使用的RabbitMQ的.Net客户端API。

RabbitMQ 是由 LShift 提供的一个 Advanced Message Queuing Protocol (AMQP) 的开源实现,由以高性能、健壮以及可伸缩性出名的 Erlang 写成,因此也是继承了这些优点。

AMQP 里主要要说两个组件:Exchange 和 Queue (在 AMQP 1.0 里还会有变动),

如下图所示,绿色的 X 就是 Exchange ,红色的是 Queue ,这两者都在 Server 端,又称作 Broker ,

这部分是 RabbitMQ 实现的,而蓝色的则是客户端,通常有 Producer 和 Consumer 两种类型:

二、asp.net项目搭建

1、新建项目(略)

2、项目nuget需要使用的三方dll,本文案例使用的版本如下图

3、消息队列类库结构说明

4、BusBuilder.cs管道创建类,主要负责链接Rabbitmq

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/// <summary>
/// 消息服务器连接器
/// </summary>
public class BusBuilder
{
     public static IBus CreateMessageBus()
     {
         //消息服务器连接字符串
         var connectionString = ConfigurationManager.ConnectionStrings[ "RabbitMQ" ];
         if (connectionString ==  null || connectionString.ConnectionString ==  string .Empty)
         {
             throw new Exception( "messageserver connection string is missing or empty" );
         }
         return RabbitHutch.CreateBus(connectionString.ConnectionString);
     }
}

5、IProcessMessage类,定义了一个消息方法,用于消息传递

1
2
3
4
5
6
public interface IProcessMessage
{
     void ProcessMsg(Message msg);
 
     void Notice();
}

6、Message类,定义了消息传递的实体属性字段等信息

1
2
3
4
5
6
7
8
9
10
public class Message
{
     public string MessageID {  get set ; }
     
     public string MessageTitle {  get set ; }
 
     public string MessageBody {  get set ; }
 
     public string MessageRouter {  get set ; }
}

7、MQHelper类,负责创建消息管道、创建消息管道、发送消息体等工作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/// <summary>
/// 发送消息
/// </summary>
public static void Publish(Message msg)
{
     创建消息bus
     IBus bus = BusBuilder.CreateMessageBus();
     try
     {
         using (var publishChannel = bus.OpenPublishChannel())    //创建消息管道
         {
             publishChannel.Publish(msg, x => x.WithTopic(msg.MessageRouter));   //通过管道发送消息
         }
     }
     catch (EasyNetQException ex)
     {
         //处理连接消息服务器异常
     }
     bus.Dispose(); //与数据库connection类似,使用后记得销毁bus对象
}

8、web项目进行调用后台消息队列方法

1
2
3
4
5
6
RabbitMQ.Message msg =  new RabbitMQ.Message();
msg.MessageID =  "test" ;
msg.MessageBody = DateTime.Now.ToString();
msg.MessageTitle =  "test" ;
msg.MessageRouter =  "pcm.notice.zhangsan" ;
RabbitMQ.MQHelper.Publish(msg);

这样就可以用c#发送消息到队列中,测试结果如下图:

查看队列下的消息记录

获取队列消息尝试

至此,C#向Rabbitmq消息队列发送消息已经简单完成

转载于:https://www.cnblogs.com/jjg0519/p/6738284.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值