gpt4 book ai didi

c# - 如何让 IModel.BasicAcks 启动?

转载 作者:行者123 更新时间:2023-11-30 16:30:20 28 4
gpt4 key购买 nike

我是第一次使用 RabbitMQ 的 .NET API,我想出了一个对我来说似乎合理的用例:我想创建发布消息并在消息被确认后做一些事情的发布者. IModel.BasicAcks 事件似乎是了解这一点的好方法,所以——

我写了一个发布者:

       private static void Post(string message) {

model.ExchangeDeclare("MyExchange", ExchangeType.Fanout, true);
model.QueueDeclare("MyQueue", true, false, false, null);
model.QueueBind("MyQueue", "MyExchange", "", new Dictionary<string, object>());

byte[] messageBodyBytes = System.Text.UTF8Encoding.ASCII.GetBytes(message);
IBasicProperties props = model.CreateBasicProperties();
props.ContentType = "text/plain";
props.DeliveryMode = 2;
model.BasicPublish("MyExchange", "", props, messageBodyBytes);
}

和订阅者:

    private static void Receive() {
var gotten = model.BasicGet("MyQueue", false);
var text = System.Text.UTF8Encoding.ASCII.GetString(gotten.Body);
Console.WriteLine(text);
model.BasicAck(gotten.DeliveryTag, false);
}

这是控制台应用程序的入口点:

        static void Main(string[] args) {

connectionFactory = new ConnectionFactory();
connectionFactory.HostName = "localhost";
connection = connectionFactory.CreateConnection();
model = connection.CreateModel();
model.BasicAcks += new RabbitMQ.Client.Events.BasicAckEventHandler(model_BasicAcks);
Post("Hello, World!");
Receive();
Console.ReadKey();

connection.Dispose();
model.Dispose();

}

由于某种原因,我的事件处理程序没有被调用。 “你好,世界!”消息被发布、读取、确认并打印到控制台,但由于某种原因从未调用事件处理程序。

我做错了什么吗?订阅 IModel.ModelShutdown 似乎工作正常。

最佳答案

我将好奇地提到我从 RabbitMQ 团队得到的关于这个问题的回复。

Here's what they had to say

简而言之,事件触发了,但它不是我想的那样——它是为了发布者确认,explained in this RabbitMQ blog post

关于c# - 如何让 IModel.BasicAcks 启动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5784697/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com