.NET C#中消息队列RabbitMQ

消息队列RabbitMQ

Message Queue消息队列,简称MQ,是一种应用程序对应用程序的通信方法,应用程序通过读写出入队列的消息来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此通信。MQ是消费-生产者模型的一个典型代表,一端往消息队列中不断写入消息,而另一端则可以读取或者订阅队列中的消息。
MQ是一种消息中间件技术,所以它能够支持多种类型的语言开发,同时也是跨平台的通信机制,也就是说MQ支持将信息转化为XML或者JSon等类型的数据存储到消息队列中,然后可以使用不同的语言来处理消息队列中的消息,这样就很容易的做到了信息的通信,同时也为信息的通信起到了缓冲的作用,经常会在金融项目中使用这种通信机制。

MQ安装

打开控制面板-“添加/删除程序” – “添加/删除 windows组件”步骤安装MSMQ。
MSMQ可以安装为工作组模式或域模式。如果安装程序没有找到一台运行提供目录服务的消息队列的服务器,则只可以安装为工作组模式,此计算机上的“消息队列”只支持创建专用队列和创建与其他运行“消息队列”的计算机的直接连接。

配置MSMQ

打开计算机管理 – 服务和应用程序-消息队列,在专用队列下创建MSMQDemo队列
在这里插入图片描述

MQ Demo

在.NET中微软对MQ做了封装,把MQ有关的信息封装到了MessageQueue类中,在开发的时候可以直接引用该类,对队列中的消息做操作。
在操作消息前首先要为消息指定存储的队列,所以在创建消息时首先要在服务器上创建一个队列,然后为MessageQueue指定消息队列的路径。
接下来演示发送数据和接收数据代码的编写方法,下面的示例中使用的是私有的队列类型来演示的操作。首先从发送数据开始,在发送数据时首先要创建我们的MQ,然后根据MQ的地址创建相应的队列,调用队列的send方法将数据信息发送到队列中,如下代码:

private void SendMailMQ(List<string> addressStr, string account, string password, string host, string port, string title, string message, long TenantId)
        {
            try
            {
                //声明MQ路径
                var ekQ = ".\\Private$\\mailqueue";
                //不存在路径时创建
                if (!MessageQueue.Exists(ekQ))
                    MessageQueue.Create(ekQ);

                //创建实例化
                var queue = new MessageQueue(ekQ);

                foreach (var item in addressStr)
                {
                    var encryptStr = JsonConvert.SerializeObject(
                        new
                        {
                            MailMsg = new
                            {
                                account = account,
                                password = password,
                                host = host,
                                port = port,
                                title = title,
                                message = message,
                                address = item
                            },
                            TenantId = TenantId
                        });
                    queue.Send(encryptStr);
                    SaveLog(encryptStr);
                }
            }
            catch (Exception ex)
            {
                SaveLog("异常:" + ex.Message + ex.StackTrace);
            }
        }

运行上面的代码后MQ将会把消息发送到相应的队列中,这里采用的是专有队列所以会将消息发送到本地的队列中,这样在消息的发送方和调用方之间就构建了一个相互松耦合的桥梁,它就是消息队列,

接下来演示如何接收消息队列。

public class MailThread
    {
        MessageQueue queue;
        public void StartMailMQ()
        {
            string ekQ = ".\\Private$\\mailqueue";
            //不存在路径时创建
            if (!MessageQueue.Exists(ekQ))
                MessageQueue.Create(ekQ);

            queue = new MessageQueue(ekQ);

            queue.Formatter = new XmlMessageFormatter(new Type[] { typeof(String) });
            while (!MessageQueue.Exists(ekQ))
            {
                Console.WriteLine("未找到mailqueue队列");
            }
            queue.ReceiveCompleted += Queue_ReceiveCompleted;
            queue.BeginReceive(MessageQueue.InfiniteTimeout);
        }

        private void Queue_ReceiveCompleted(object sender, ReceiveCompletedEventArgs e)
        {
            var m = e.Message;
            var deceivedMsg = m.Body.ToString();
            Console.WriteLine("接收邮件消息内容:{0} \n--------------", (string)m.Body);
            if (!string.IsNullOrEmpty(deceivedMsg))
                new DispatchMessager().SendMail(deceivedMsg);
            
            queue.BeginReceive(MessageQueue.InfiniteTimeout);
        }
    }

MQ是一种企业服务的消息中间节技术,这种技术常常伴随着企业服务总线相互使用,构成了企业分布式开发的一部分,如果考虑到消息的发送和传送之间是可以相互不联系的并且需要分布式架构,则可以考虑使用MQ做消息的中间价技术,MQ的功能已经足够开发使用。
转载地址:https://www.cnblogs.com/xuwendong/p/6544079.html
其他:https://www.cnblogs.com/gangle/p/9303080.html
https://www.cnblogs.com/Leo_wl/p/8288793.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值