zoukankan      html  css  js  c++  java
  • RabbitMQ学习系列二:.net 环境下 C#代码使用 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

    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 { getset; }
         
        public string MessageTitle { getset; }
     
        public string MessageBody { getset; }
     
        public string MessageRouter { getset; }
    }

    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消息队列发送消息已经简单完成

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

    附件: RabbitMQ.rar 下载 (下载需要:0 个80币)

  • 相关阅读:
    mysql中删除重复记录,并保留重复数据中的一条数据的SQL语句
    架构设计文档提纲简描
    各大互联网公司架构演进之路汇总
    大数据安全规范
    生活启示
    mysql数据库分库分表(Sharding)
    大数据风控指标----查准率与查全率
    YARN和MapReduce的内存设置参考
    不要在linux上启用net.ipv4.tcp_tw_recycle参数
    [Spark经验一]Spark RDD计算使用的函数里尽量不要使用全局变量
  • 原文地址:https://www.cnblogs.com/zxtceq/p/7891470.html
Copyright © 2011-2022 走看看