如何在 windows 上使用 rabbitMQ

68 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 30 天,点击查看活动详情

  1. 安装适用于 Windows 的 Docker:只需下载它并让安装程序完成剩下的工作
  2. 启动 Docker 并等待其初始化。您将在任务栏中看到一个鲸鱼图标
  3. 打开 Powershell 并键入:
docker --version

如果您没有看到任何错误,并且看到了 Docker 版本,则表明它已正确安装。

  1. 现在我们必须下载 RabbitMQ 镜像。在这种情况下,我们将使用管理插件下载图像,以便能够查看 RabbitMQ 服务器端 GUI。下载或更新 Docker 镜像的命令是pull
docker pull rabbitmq:3-management

image.png

  1. 现在我们将使用一个简单的命令启动 RabbitMQ Docker 镜像:

docker run -d -p 15672:15672 -p 5672:5672 --name rabbit-test-for-medium rabbitmq:3-management

通过p参数,我们将 RabbitMQ 端口映射到 Docker 容器端口。15672 是 RabbitMQ GUI 的默认端口,5672 是 RabbitMQ 消息代理的默认端口。我们使用参数name为我们的容器命名,以便以比使用生成的 GUID 更易读的方式识别它。这将使我们能够轻松地停止、删除和管理我们的容器。最后,我们指定要运行的 docker 镜像,在本例中是我们之前拉取的镜像。

如果操作顺利,您将看到一个 GUID 作为输出。

  1. 通过在浏览器中打开“ http://localhost:15672/#/ ”来测试图像。默认登录是guest guest:您应该看到 RabbitMQ 管理 GUI。

image.png

如果你正确地看到了这个页面,那么最重要的部分就完成了

  1. 现在我们已准备好将消息发送到我们的 RabbitMQ 端点!在此阶段,选择权在您手中:我每天都使用 .NET,因此我将向您展示一个 C# 示例。提醒您,使用您的首选语言连接到端点的默认值:
  • HostName: “localhost”
  • UserName: “guest”
  • Password: “guest”
  • Port: 5672

在我的例子中,我将创建一个新的 Windows 控制台应用程序,安装RabbitMQ.ClientNuget 包并编写一些代码行来创建一个队列并每 500 毫秒发送一条消息:

using RabbitMQ.Client;
using System;
using System.Text;
using System.Threading.Tasks;

namespace TestRabbit
{
    internal static class Program
    {
        static async Task Main(string[] args)
        {
            const string queueName = "testqueue";

            try
            {
                var connectionFactory = new ConnectionFactory()
                {
                    HostName = "localhost",
                    UserName = "guest",
                    Password = "guest",
                    Port = 5672,
                    RequestedConnectionTimeout = 3000, // milliseconds
                };

                using (var rabbitConnection = connectionFactory.CreateConnection())
                {
                    using (var channel = rabbitConnection.CreateModel())
                    {
                        // Declaring a queue is idempotent 
                        channel.QueueDeclare(
                            queue: queueName,
                            durable: false,
                            exclusive: false,
                            autoDelete: false,
                            arguments: null);

                        while (true)
                        {
                            string body = $"A nice random message: {DateTime.Now.Ticks}";
                            channel.BasicPublish(
                                exchange: string.Empty,
                                routingKey: queueName,
                                basicProperties: null,
                                body: Encoding.UTF8.GetBytes(body));

                            Console.WriteLine("Message sent");
                            await Task.Delay(500);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine(ex.ToString());
                Console.ForegroundColor = ConsoleColor.White;
            }

            Console.WriteLine("End");
            Console.Read();
        }
    }
}

在这种情况下,我使用了与 RabbitMQ 相关的小技巧:我通过设置与我声明的队列同名的发布方法的路由键,直接将消息发送到队列而不设置到交换的绑定.

  1. 最后,我们要确保消息被队列正确接收。我们可以打开我们的管理 GUI,点击Queues导航按钮,然后testqueue。如果我们发送消息,我们将看到图表的线条在移动:

image.png 此外,您可以单击Get messages菜单以从队列中获取消息并阅读其正文:

image.png