前言
最近在忙一个高考项目,看着系统顺利完成了这次高考,终于可以松口气了。看到那些即将参加高考的学生,也想起当年高三的自己。
下面分享下RabbitMQ实战经验,希望对大家有所帮助:
一、生产消息
关于RabbitMQ的基础使用,这里不再介绍了,项目中使用的是Exchange中的topic模式。
先上发消息的代码
private bool MarkErrorSend(string[] lstMsg)
{try{var factory = newConnectionFactory()
{
UserName= "guest",//用户名
Password = "guest",//密码
HostName = "localhost",//ConfigurationManager.AppSettings["sHostName"],
};//创建连接
var connection =factory.CreateConnection();//创建通道
var channel =connection.CreateModel();try{//定义一个Direct类型交换机
channel.ExchangeDeclare(
exchange:"TestTopicChange", //exchange名称
type: ExchangeType.Topic, //Topic模式,采用路由匹配
durable: true,//exchange持久化
autoDelete: false,//是否自动删除,一般设成false
arguments: null//一些结构化参数,比如:alternate-exchange
);//定义测试队列
channel.QueueDeclare(
queue:"Test_Queue", //队列名称
durable: true, //队列磁盘持久化(要和消息持久化一起使用才有效)
exclusive: false,//是否排他的,false。如果一个队列声明为排他队列,该队列首次声明它的连接可见,并在连接断开时自动删除
autoDelete: false,//是否自动删除,一般设成false
arguments: null);//将队列绑定到交换机
string routeKey = "TestRouteKey.*";//*匹配一个单词
channel.QueueBind(
queue:"Test_Queue",
exchange:"TestTopicChange",
routingKey: routeKey,
arguments:null);//消息磁盘持久化,把DeliveryMode设成2(要和队列持久化一起使用才有效)
IBasicProperties properties =channel.CreateBasicProperties();
properties.DeliveryMode= 2;
channel.ConfirmSelect();//发送确认机制
foreach (var itemMsg inlstMsg)
{byte[] sendBytes =Encoding.UTF8.GetBytes(itemMsg);//发布消息
channel.BasicPublish(
exchange:"TestTopicChange",
routingKey:"TestRouteKey.one",
basicProperties: properties,
body: sendBytes
);
}bool isAllPublished =