使用 Windows 客户端的 RabbitMQ Messaging for .NET 8 Web API 第 2 部分

构建现有的 WebApi 后,如上一篇文章所述。现在,我将向您解释如何将此消息传递到客户端应用程序。

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

首先,使用 Visual Studio 在本地计算机上运行 WebApi。

如何知道应用程序正在运行?

只需检查 WebApi .exe 文件是否在系统托盘或任务管理器中运行。

由于使用开发环境来测试 api,因此我使用了内置于 Web APIbapi 应用程序中的 Swagger 工具。

在 Visual Studio 中打开现有的项目解决方案。

将另一个控制台应用程序项目添加到解决方案中,或者它可能是一个不同的项目。

打开 Program.cs 文件,将以下代码片段添加到应用程序中。

namespace RabbitMQProduct.ConsoleApplication

{

internal class Program

{

static void Main(string[] args)

{

// Specify the connection factory for RabbitMQ

var factory = new ConnectionFactory

{

HostName = "localhost"

};

// Create a connection to RabbitMQ

var connection = factory.CreateConnection();

// Create a channel

using var channel = connection.CreateModel();

// Declare a queue

channel.QueueDeclare(queue: "ProductQueue", durable: false, exclusive: false, autoDelete: false);

// Create a consumer

var consumer = new EventingBasicConsumer(channel);

// Register the consumer

consumer.Received += (model, eventArgs) => {

// Consume the message

var body = eventArgs.Body.ToArray();

var message = Encoding.UTF8.GetString(body);

Console.WriteLine($"Product message received: {message}");

};

// Consume the message

channel.BasicConsume(queue: "ProductQueue", autoAck: true, consumer: consumer);

// Wait for the user to press a key

Console.ReadKey();

}

}

}

解释一下上面的代码片段。

首先,为 RabbitMQ 代理创建连接工厂。

var factory = new ConnectionFactory

{

HostName = "localhost"

};

其次,现在创建与 RabbitMQ 的连接

var connection = factory.CreateConnection();

该连接需要一条从 Rabbit 访问资源的路径,而 Rabbit 本身就是一个通道。它充当一个模型(返回新的通道、会话和模型),并且使用"USING"来确保对象在完成后被正确处理。因此,它不会引发任何异常。

using var channel = connection.CreateModel();

现在我需要从 Rabbit 声明一个队列。

channel.QueueDeclare(queue: "ProductQueue", durable: false, exclusive: false, autoDelete: false);

在主 RabbitMQProductApi 中,它可以托管多个队列,因此消费者不知道需要从为此应用程序托管的队列中选择哪一个。

RabbitMQProductApi/RabbitMQProducer.cs

namespace RabbitMQProductApi.RabbitMQ

{

public class RabbitMQProducer : IRabbitMQProducer

{

public void SendProductMessage<T>(T message)

{

var factory = new ConnectionFactory() { HostName = "localhost" };

var connection = factory.CreateConnection();

var channel = connection.CreateModel();

channel.QueueDeclare(queue: "ProductQueue", durable: false, exclusive: false, autoDelete: false, arguments: null);

var json = System.Text.Json.JsonSerializer.Serialize(message);

var body = System.Text.Encoding.UTF8.GetBytes(json);

channel.BasicPublish(exchange: "", routingKey: "ProductQueue", basicProperties: null, body: body);

}

}

}

请参阅主机应用程序队列名称在其他应用程序中使用时应该相同。

这里是"ProductQueue"。

现在在 RabbitMQ 网页上检查队列详细信息,并找到"ProductQueue"

在这里,我们可以看到主机应用程序将值发送到 RabbitMQ 代理,然后消费应用程序可以获取该值,而无需通知其他应用程序。客户已经订阅了下面指定的队列。

在 API 中,我只是将添加的值添加到数据库中,然后将其广播到 RabbitMQ,因此控制台应用程序将从代理接收添加的值。

文章结束。

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

相关推荐
玖釉-9 小时前
[Vulkan 学习之路] 08 - 给图片穿马甲:图像视图 (Image Views)
c++·windows·图形渲染
古城小栈11 小时前
Rust 交叉编译:Windows ====> Linux (musl 静态编译)
linux·windows·rust
玖釉-11 小时前
[Vulkan 学习之路] 09 - 显卡的流水线工厂:图形管线概览 (Graphics Pipeline)
c++·windows·图形渲染
晋人在秦 老K12 小时前
Windows 7还能用!VxKex实现Edge浏览器及现代应用兼容方案
windows·edge·win7系统兼容性修复·api扩展工具·老旧系统运行新软件·dll缺失错误解决·兼容性调试方案
love530love12 小时前
EPGF 新手教程 22教学模板不是压缩包:EPGF 如何设计“可复制、可检查、可回收”的课程模板?
ide·人工智能·windows·python·架构·pycharm·epgf
程序员南飞12 小时前
列表对象排序
windows
玖釉-13 小时前
[Vulkan 学习之路] 02 - 万物起源:创建 Vulkan 实例 (Instance)
c++·windows·图形渲染
博学的轮船Y14 小时前
绕过Windows 11安装限制,Rufus带给你“奇迹”,低配电脑的春天
windows·资讯
seasonsyy14 小时前
3.虚拟机中安装Win7系统遇到问题及解决
windows·操作系统·vmware·虚拟机
水饺编程14 小时前
第4章,[标签 Win32] :获取设备环境句柄的第一个方法
c语言·c++·windows·visual studio