.Net使用RabbitMQ即时发消息Demo

2025-05-29 0 64

前言

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

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

步骤如下:

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

.Net使用RabbitMQ即时发消息Demo

2.生产者端代码:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65
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.消费者端代码:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64
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.程序结果:

.Net使用RabbitMQ即时发消息Demo

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

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

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对快网idc的支持。

原文链接:https://www.cnblogs.com/JentZhang/archive/2018/07/09/9283964.html

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 .Net使用RabbitMQ即时发消息Demo https://www.kuaiidc.com/98604.html

相关文章

发表评论
暂无评论