回到顶部

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

时间:4年前   作者:庞顺龙   浏览:9585   [站内原创,转载请注明出处]

标签: C sharp   ASP.NET   RabbitMQ  

上一篇已经讲了Rabbitmq如何在Windows平台安装,不懂请移步:RabbitMQ学习系列一:windows下安装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

/// <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类,定义了一个消息方法,用于消息传递
public interface IProcessMessage
{
    void ProcessMsg(Message msg);

    void Notice();
}
6、Message类,定义了消息传递的实体属性字段等信息
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类,负责创建消息管道、创建消息管道、发送消息体等工作
/// <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项目进行调用后台消息队列方法
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消息队列发送消息已经简单完成

下一篇:C#订阅消息、获取消息的方式,敬请期待。。。



庞顺龙最后编辑于:4年前

内容均为作者独立观点,不代表八零IT人立场,如涉及侵权,请及时告知。

评论努力加载中...
暂无评论
暂无评论

手机扫码阅读

热门相关

加载中...
关于我们   联系我们   申请友链   赞助记录   站点地图
© 2014 - 2017 www.80iter.com All Rights Reserved. 京ICP备14042174号-1
本站遵循 CC BY 4.0 协议,转载请注明出处 。