分类:
RabbitMq
.netcore3.1 RabbitMq 发布确认
在发布端一般有两种确认发布消息的模式,Confirm
与Tx
事务确认的模式,其中Tx
所消耗的性能大于Confim
所消耗的性能。所有尽量用Confirm
,除非可靠性要求相当高。
Confirm模式
我们创建一个普通的队列并,在发送消息前通过ConfirmSelect
开启Confirm
确认模式,并在发布完成消息后通过WaitForConfirms
方法接收消息已经发布。我们来调试一下如下代码:
var factory = new ConnectionFactory()
{
HostName = "47.98.187.188",
UserName = "bob",
Password = "bob"
};
// 创建一个链接
using (var connection = factory.CreateConnection())
{
// 创建一个通道
using (var channel = connection.CreateModel())
{
// 声明一个Single_Active_Consumer_Queue队列
channel.QueueDeclare(
queue: "mytest",
durable: true,
exclusive: false,
autoDelete: false,
arguments: null);
// 开启发布确认
channel.ConfirmSelect();
// 发布Priority_Queue队列中的消息
for (int i = 0; i < 10; i++)
{
var msg = Encoding.UTF8.GetBytes($"Message {i} ,Priority: 1");
channel.BasicPublish(string.Empty, "mytest", null, msg);
}
// 等待,直到所有发布的消息都已确认。可以传入一个超时参数
var Result = channel.WaitForConfirms();
Console.WriteLine(" Press [enter] to exit.");
Console.ReadLine();
}
}
Tx事务确认发布消息
我们先清理一下队列中的消息,然后通过TxSelect
方法开启事务,通过TxCommit
方法提交消息,如果中途发布失败我们需要通过TxRollback
回滚事务。我们来调试一下,下面的例子:
var factory = new ConnectionFactory()
{
HostName = "47.98.187.188",
UserName = "bob",
Password = "bob"
};
// 创建一个链接
using (var connection = factory.CreateConnection())
{
// 创建一个通道
using (var channel = connection.CreateModel())
{
// 声明一个Single_Active_Consumer_Queue队列
channel.QueueDeclare(
queue: "mytest",
durable: true,
exclusive: false,
autoDelete: false,
arguments: null);
try
{
// 开启发布事务
channel.TxSelect();
// 发布Priority_Queue队列中的消息
for (int i = 0; i < 10; i++)
{
var msg = Encoding.UTF8.GetBytes($"Message {i} ,Priority: 1");
channel.BasicPublish(string.Empty, "mytest", null, msg);
}
// 确认消息提交
channel.TxCommit();
}
catch (Exception ex)
{
// 回滚事务
channel.TxRollback();
}
Console.WriteLine(" Press [enter] to exit.");
Console.ReadLine();
}
}
我们发现在事务没有提交之前是没有消息的!提交后就有了。
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739
评价
排名
2
文章
623
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 :
好是好,这个对效率影响大不大哇,效率高不高
一个bug让程序员走上法庭 索赔金额达400亿日元
剑轩 : 有点可怕
ASP.NET Core 服务注册生命周期
剑轩 :
http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术