最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

.Net使用RabbitMQ即时发消息Demo

来源:懂视网 责编:小采 时间:2020-11-27 22:34:56
文档

.Net使用RabbitMQ即时发消息Demo

.Net使用RabbitMQ即时发消息Demo:前言 最近项目要使用RabbitMQ,网上已经有很多优秀的文章了,百度百科对RabbitMQ阐述也非常明确,建议去看下,还有amqp协议。必须一提的是rabbitmq是由LShift提供的一个消息队列协议(AMQP)的开源实现,由以高性能、健壮以及可伸缩性出名的Erlang写成(
推荐度:
导读.Net使用RabbitMQ即时发消息Demo:前言 最近项目要使用RabbitMQ,网上已经有很多优秀的文章了,百度百科对RabbitMQ阐述也非常明确,建议去看下,还有amqp协议。必须一提的是rabbitmq是由LShift提供的一个消息队列协议(AMQP)的开源实现,由以高性能、健壮以及可伸缩性出名的Erlang写成(

前言

最近项目要使用RabbitMQ,网上已经有很多优秀的文章了,百度百科对RabbitMQ阐述也非常明确,建议去看下,还有amqp协议。必须一提的是rabbitmq是由LShift提供的一个消息队列协议(AMQP)的开源实现,由以高性能、健壮以及可伸缩性出名的Erlang写成(因此也是继承了这些优点)。

最近参考大神们的博客,自己做了一个RabbitMQ即时发消息的Demo。下面话不多说了,来一起看看详细的介绍吧。

步骤如下: 

1.使用VS的NuGet安装包管理工具安装RabbitMQ.Client:

2.生产者端代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using RabbitMQ.Client;

namespace RabbitMQ.Producter
{
 class Program
 {
 /// <summary>
 /// 连接配置
 /// </summary>
 private static readonly ConnectionFactory rabbitMqFactory = new ConnectionFactory()
 {
 HostName="localhost",
 UserName = "guest",
 Password = "guest",
 Port = 5672,
 //VirtualHost = "JentVirtualHost"
 };
 /// <summary>
 /// 路由名称
 /// </summary>
 const string ExchangeName = "Jent.Exchange";
 /// <summary>
 /// 队列名称
 /// </summary>
 const string QueueName = "Jent.Queue";
 static void Main(string[] args)
 {
 DirectExchangeSendMsg();
 Console.WriteLine("按任意键退出程序!");
 Console.ReadKey();
 }
 /// <summary>
 /// 单点精确路由模式
 /// </summary>
 private static void DirectExchangeSendMsg()
 {
 using (IConnection conn = rabbitMqFactory.CreateConnection())
 {
 using (IModel channel = conn.CreateModel())
 {
 channel.ExchangeDeclare(ExchangeName, "direct", durable: true, autoDelete: false, arguments: null);
 channel.QueueDeclare(QueueName, durable: true, exclusive: false, autoDelete: false, arguments: null);
 channel.QueueBind(QueueName, ExchangeName, routingKey: QueueName);

 var props = channel.CreateBasicProperties();
 props.Persistent = true;
 Console.WriteLine("请输入需要发送的消息:");
 string vadata = Console.ReadLine();
 while (vadata != "exit")
 {
 var msgBody = Encoding.UTF8.GetBytes(vadata);
 channel.BasicPublish(exchange: ExchangeName, routingKey: QueueName, basicProperties: props, body: msgBody);
 Console.WriteLine(string.Format("发送时间:{0},发送完毕,输入exit退出消息发送", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")));
 vadata = Console.ReadLine();
 }
 }
 }
 }
 }
}

3.消费者端代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using RabbitMQ.Client;

namespace RabbitMQ.Consumer
{
 class Program
 {
 /// <summary>
 /// 连接配置
 /// </summary>
 private static readonly ConnectionFactory rabbitMqFactory = new ConnectionFactory()
 {
 HostName = "127.0.0.1",
 UserName = "guest",
 Password = "guest",
 Port = 5672,
 //VirtualHost = "JentVirtualHost"
 };
 /// <summary>
 /// 路由名称
 /// </summary>
 const string ExchangeName = "Jent.Exchange";
 /// <summary>
 /// 队列名称
 /// </summary>
 const string QueueName = "Jent.Queue";

 static void Main(string[] args)
 {
 DirectAcceptExchange();

 Console.WriteLine("输入任意值退出程序!");
 Console.ReadKey();
 }

 private static void DirectAcceptExchange()
 {
 using (IConnection conn = rabbitMqFactory.CreateConnection())
 {
 using (IModel channel = conn.CreateModel())
 {
 channel.ExchangeDeclare(ExchangeName, "direct", durable: true, autoDelete: false, arguments: null);
 channel.QueueDeclare(QueueName, durable: true, exclusive: false, autoDelete: false, arguments: null);
 channel.QueueBind(QueueName, ExchangeName, routingKey: QueueName);

 while (true)
 {
 BasicGetResult msgResponse = channel.BasicGet(QueueName, autoAck: false);
 if (msgResponse != null)
 {
 var msgBody = Encoding.UTF8.GetString(msgResponse.Body);
 Console.WriteLine(string.Format("接收时间:{0},消息内容:{1}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), msgBody));
 }
 //System.Threading.Thread.Sleep(TimeSpan.FromSeconds(1));
 }
 }
 }
 }
 }
}

4.程序结果:

注:在第一步之前,你需要安装RabbitMQ客户端,可从http://www.rabbitmq.com/download.html下载,

        但是RabbitMQ又是依赖于Erlang OTP平台,所以,安装RabbitMQ之前,需要先从http://www.erlang.org/download.html下载安装erlang

        关于这部分的内容,推荐阅读:https://www.gxlcms.com/article/143499.htm

总结

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

.Net使用RabbitMQ即时发消息Demo

.Net使用RabbitMQ即时发消息Demo:前言 最近项目要使用RabbitMQ,网上已经有很多优秀的文章了,百度百科对RabbitMQ阐述也非常明确,建议去看下,还有amqp协议。必须一提的是rabbitmq是由LShift提供的一个消息队列协议(AMQP)的开源实现,由以高性能、健壮以及可伸缩性出名的Erlang写成(
推荐度:
标签: 消息 发送 实时
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top