.Net Core3.x 中集成RabbitMQ

        在项目开发中,有时候需要用到消息队列技术进行处理,这样可以提升系统的相应速度以及处理速度,今天我们就来集成其中的一款消息队列框架RabbitMQ,首先我们简答介绍下RabbitMQ(熟悉的朋友可以直接跳过这段介绍)

       RabbitMQ 中有5种模式,简单队列模式、Work模式,路由模式,主题模式,发布订阅模式。

      1.简单队列:一个生产者对应一个消费者,一对一的关系。

      2.work 模式:一个生产者对应多个消费者,但是只有一个消费者可以获得到消息。

      3.路由模式:生产者将消息发送到direct交换器,在绑定队列和交换器的时候有一个路由key,生产者发送的消息会指定一个路                               由key,那么消息只会发送到相应key相同的队列,接着监听该队列的消费者消费信息。

      4.主题模式:路由模式根据路由key进行完整的匹配(完全相等才发送消息),这里的通配符模式通俗的来讲就是模糊匹配。

      5.发布订阅模式:一个消费者将消息首先发送到direct交换器,交换器绑定多个队列,然后被监听该队列的消费者所接收并消费,

                                 交换器有四种类型:direct,fanout,topic,headers

      在项目中使用,一般使用后3中模式,此处我使用的是路由模式,交换器的类型选择的是direct。下边我们开始进行集成。

一、在项目中添加引用RabbitMQ.Client

       直接在nuget 中搜索,选择最新的版本添加在项目引用中即可,不在赘述。

二、生产者代码

      生产者就是消息的发送端,既然是在项目中集成,我们就需要编写一个生产者的工具类,外部直接调用接口放入消息即可,具体代码如下

     

    简单介绍下代码

        1.IBaseDependency是一个空接口,因为我的项目中使用了autofac ,为了可以使用属性注入。可以不继承接口

        2.logger是我的项目中采用了nlog 日志框架,没有使用.netCore 自带的日志框架

        3.RabbitMQClient构造函数这里,我们采用了构造注入,打开创建一个信道Channel

        4.PushMessage是对外暴露的方法,需要传递三个参数,分别是消息内容,交换机名称和关键字key

        5.消息队列里边的消息要确保在消费之前不能丢失,所以要设置为可持久化,所以我们要设置交换机和信道都要持久化,代码如下所示

      6.消费者拿到消息后需要手动返回一个ack确认,所以交换机在声明的时候设置为手动确认模式,需要设置autoDelete 为false如下图所示,

三、消费者代码

      在编写消费者代码之前需要说明一点:项目中我们希望消费者可以跟随我们的项目一起启动,并且可以一直运行,类似于windowsService 服务,但是WindowsService又不能跨平台,所以我们就使用了NetCore 自带的可后台定时执行任务的方法,其实很简单,集成实现一个接口IHostedService(Microsoft.Extensions.Hosting类下),显示实现接口中的方法即可。因为我们的消费者不可能只有一个类,可能有很多种,所以此处我们也写了一个消费者的基类RabbitListener,具体消费者实现该基类即可,基类的代码如下

简单介绍代码

1.和生产者一样,在实例化消费者对象时候,打开消息队列,打开信道

2.IHostedService需要显示实现他的接口,只有两个 StartAsync 和 StopAsync,通过方法名称,可以清楚的知道,StartAsync里边的代码就是服务启动的时候运行的代码

3.Register方法里边的代码就是消费者代码,我们声明了可持久化的队列,并且设置消费者每次只能消费一个消息,在消费成功后,手动返回确认Ack

4.Process是我们定义的虚方法,实例类中复写该方法就可以执行相应的代码。

5.TestLister 继承了RabbitListener,TestLister 就是我们的实例方法

四、修改StartUp.cs

在ConfigureServices里边添加以下代码

启动程序,我们自已定义的服务就可以运行成功了,集成rabbitMQ 成功。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值