iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >C#如何利用RabbitMQ实现点对点消息传输
  • 697
分享到

C#如何利用RabbitMQ实现点对点消息传输

2023-06-15 02:06:23 697人浏览 薄情痞子
摘要

这篇文章主要介绍C#如何利用RabbitMQ实现点对点消息传输,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!消息队列模型所有 MQ 产品从模型抽象上来说都是一样的过程:消费者(consumer)订阅某个队列。生产者(

这篇文章主要介绍C#如何利用RabbitMQ实现点对点消息传输,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

消息队列模型

所有 MQ 产品从模型抽象上来说都是一样的过程:
消费者(consumer)订阅某个队列。生产者(producer)创建消息,然后发布到队列(queue)中,最后将消息发送到监听的消费者。

C#如何利用RabbitMQ实现点对点消息传输

RabbitMQ设置

RabbitMQ是通过交换机将消息转发到对应队列,所以队列需要和交换机进行绑定。本例将队列绑定到默认的amq.direct交换机,并设置Routing key,如下图所示:

C#如何利用RabbitMQ实现点对点消息传输

RabbitMQ动态库安装

通过NuGet包管理器进行安装RabbitMQ.Client,如下所示:

C#如何利用RabbitMQ实现点对点消息传输

RabbitMQ.Client相关知识点

  • ConnectionFactory:构造一个实例,主要创建连接。

  • IConnection:表示一个基于AMQP协议的连接。

  • IModel:表示一个RabbitMQ通道,可用于声明一个队列,然后开始消费。

  • EventingBasicConsumer:基于独立事件监听的基础消费者,可以监听并接收消息。

  • 生产者基本步骤:1. 创建连接 2. 基于连接创建通道 3. 基于通道声明队列,4. 开始生产并发布消息

  • 消费者基本步骤:1. 创建连接 2. 基于连接创建通道 3. 基于通道声明队列,4. 创建消费者,5. 绑定通道和消费者,并开始消费

示例效果图

本例主要有一个生产者,一个消费者,通过消息队列进行消息转发和接收。

生产者负责消息发送,如下图所示:

C#如何利用RabbitMQ实现点对点消息传输

消费者负责消息接收,如下图所示:

C#如何利用RabbitMQ实现点对点消息传输

核心代码

代码结构:主要包括生产者,消费者,公共基础代码,如下所示:

C#如何利用RabbitMQ实现点对点消息传输

RabbitMqHelper主要创建连接,如下所示:

public class RabbitMqHelper    {        /// <summary>        /// 创建连接        /// </summary>        /// <returns></returns>        public IConnection GetConnection()        {            try            {                var factory = new ConnectionFactory()                {                    HostName = "127.0.0.1",                    Port = 5672,                    UserName = "guest",                    PassWord = "guest",                    VirtualHost = "/ShortMsgHost"                };                var conn = factory.CreateConnection();                return conn;            }            catch (Exception ex) {                throw ex;            }        }    }

RabbmitMqSendHelper用于发送消息,如下所示:

public class RabbmitMqSendHelper : RabbitMqHelper    {        /// <summary>        /// 发送消息        /// </summary>        /// <param name="msg"></param>        /// <returns></returns>        public bool SendMsg(string msg)        {            try            {                using (var conn = GetConnection())                {                    using (var channel = conn.CreateModel())                    {                        channel.QueueDeclare(queue: "ShortMsgQueue",                                     durable: true,                                     exclusive: false,                                     autoDelete: false,                                     arguments: null);                        var body = Encoding.UTF8.GetBytes(msg);                        channel.BasicPublish(exchange: "amq.direct",                                             routingKey: "ShortMsgKey",                                             basicProperties: null,                                             body: body);                        //Console.WriteLine(" [x] Sent {0}", message);                    };                };                return true;            }            catch (Exception ex)            {                throw ex;            }        }    }

RabbitMqReceiveHelper主要用于接收信息,如下所示:

public class RabbitMqReceiveHelper : RabbitMqHelper    {        public RabbitMqReceiveEventHandler OnReceiveEvent;        private IConnection conn;        private IModel channel;        private EventingBasicConsumer consumer;        public bool StartReceiveMsg()        {            try            {                conn = GetConnection();                channel = conn.CreateModel();                channel.QueueDeclare(queue: "ShortMsgQueue",                                durable: true,                                exclusive: false,                                autoDelete: false,                                arguments: null);                consumer = new EventingBasicConsumer(channel);                consumer.Received += (model, ea) =>                {                    var body = ea.Body.ToArray();                    var message = Encoding.UTF8.GetString(body);                    //Console.WriteLine(" [x] Received {0}", message);                    if (OnReceiveEvent != null)                    {                        OnReceiveEvent(message);                    }                };                channel.BasicConsume(queue: "ShortMsgQueue",                                        autoAck: true,                                        consumer: consumer);                return true;            }            catch (Exception ex)            {                throw ex;            }        }    }

C#是什么

C#是一个简单、通用、面向对象编程语言,它由微软Microsoft开发,继承了C和c++强大功能,并且去掉了一些它们的复杂特性,C#综合了VB简单的可视化操作和C++的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程从而成为.net开发的首选语言,但它不适用于编写时间急迫或性能非常高的代码,因为C#缺乏性能极高的应用程序所需要的关键功能。

以上是“C#如何利用RabbitMQ实现点对点消息传输”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网精选频道!

--结束END--

本文标题: C#如何利用RabbitMQ实现点对点消息传输

本文链接: https://www.lsjlt.com/news/276924.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C#利用RabbitMQ实现点对点消息传输
    目录消息队列模型RabbitMQ设置RabbitMQ动态库安装RabbitMQ.Client相关知识点示例效果图核心代码消息队列模型 所有 MQ 产品从模型抽象上来说都是一样的过程...
    99+
    2022-11-12
  • C#如何利用RabbitMQ实现点对点消息传输
    这篇文章主要介绍C#如何利用RabbitMQ实现点对点消息传输,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!消息队列模型所有 MQ 产品从模型抽象上来说都是一样的过程:消费者(consumer)订阅某个队列。生产者(...
    99+
    2023-06-15
  • SpringBoot如何使用WebSocket实现点对点消息
    这篇文章主要介绍“SpringBoot如何使用WebSocket实现点对点消息”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SpringBoot如何使用WebSocket实现点对点消息”文章能帮助大...
    99+
    2023-07-06
  • C#如何用RabbitMQ实现消息订阅与发布
    这篇文章给大家分享的是有关C#如何用RabbitMQ实现消息订阅与发布的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Fanout交换机模型扇形交换机,采用广播模式,根据绑定的交换机,路由到与之对应的所有队列。一个...
    99+
    2023-06-15
  • 如何利用rabbitMq的死信队列实现延时消息
    目录前言mq基本的消息模型mq死信队列的消息模型maven依赖配置普通队列和死信队列死信队列消费者发送消息测试测试成功总结前言 使用mq自带的死信去实现延时消息要注意一个坑点,就是m...
    99+
    2023-01-28
    rabbitMq死信队列 rabbitMq延时消息 rabbitMq延时队列
  • 如何利用Redis和C++实现消息订阅功能
    如何利用Redis和C++实现消息订阅功能消息订阅是现代应用程序开发中常见的一种通信模式,它可以实现实时消息推送和数据更新通知。Redis是一个高性能的内存数据库,它支持发布-订阅模式,并且提供了丰富的功能和API,使得在C++中使用Red...
    99+
    2023-10-22
    C++ redis 消息订阅
  • 如何利用C++实现一个简单的餐厅点餐系统?
    如何利用C++实现一个简单的餐厅点餐系统?餐厅点餐系统是现代餐饮行业中非常重要的一环。通过使用计算机程序来管理和处理点餐、结算等操作,可以提高餐厅的效率和服务质量。本文将介绍如何利用C++编程语言实现一个简单的餐厅点餐系统。首先,我们需要定...
    99+
    2023-11-02
    系统 餐厅 点餐
  • Android应用中的断点续传下载如何利用HTTP协议实现
    这期内容当中小编将会给大家带来有关Android应用中的断点续传下载如何利用HTTP协议实现,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。FileDownloader.java    ...
    99+
    2023-05-31
    android http roi
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作