当前位置: 首页 > news >正文

RabbitMQ应用(基于腾讯云)

1.防火墙配置

关于RabbitMQ的远程,主要有4个端口需要开通【入站规则】,分别是:

  • 端口 5672:这是 RabbitMQ 的默认 AMQP(Advanced Message Queuing Protocol)端口,用于客户端与 RabbitMQ 服务器之间建立连接并进行消息传递。AMQP 是一种高级消息队列协议,客户端通过这个端口发送和接收消息,实现应用程序之间的异步通信。许多编程语言的 RabbitMQ 客户端库默认使用此端口来连接服务器。
  • 端口 15762:这个端口通常是 RabbitMQ Management 插件使用的 HTTPS 端口。通过该端口,用户可以通过浏览器访问 RabbitMQ 的管理界面,以可视化的方式管理和监控 RabbitMQ 服务器,包括查看队列、交换机、绑定关系、连接信息、消息统计等,还可以进行用户管理、权限设置等操作。如果启用了 SSL/TLS 加密,那么与管理界面的安全连接就会使用这个端口。
  • 端口 25762:一般情况下,RabbitMQ 本身不会直接使用这个端口。可能是在某些特定的部署场景中,被其他与 RabbitMQ 相关的工具、插件或自定义应用程序所使用,用于特定的功能扩展或与外部系统的交互,但这不是 RabbitMQ 的标准端口用途。
  • 端口 4396:同样,这个端口也不是 RabbitMQ 的标准端口。它可能是在特定的网络环境或自定义配置中,被用于与其他服务或应用程序进行通信,或者是被误配置为 RabbitMQ 相关的端口,但在默认的 RabbitMQ 功能中,没有明确指定该端口的特定用途。

需要注意的是,虽然 5672 和 15762 端口是 RabbitMQ 较为常见和标准的端口,但在实际部署中,管理员可以根据需求和安全策略对端口进行自定义配置。而对于非标准端口,如 25762 和 4396,需要根据具体的应用场景和配置来确定其确切用途,如果在 RabbitMQ 环境中发现这些端口被使用,应检查相关的配置和日志,以了解其作用和是否存在潜在的安全风险。

端口配置案例:

2.安全组配置

3. 配置 RabbitMQ 以允许远程连接

默认情况下,RabbitMQ 仅允许本地连接。你需要修改rabbitmq.conf文件来允许远程连接。该文件通常位于/etc/rabbitmq/目录下,如果没有,则可以直接新建

打开rabbitmq.conf文件,添加或修改以下配置:

plaintext

loopback_users.guest = false
listeners.tcp.default = 5672

 

4.修复节点名称配置

配置rabbitmq-env.conf

5.测试端口

以上可以采用telnet的方式进行测试

telnet <您的服务器IP> 5672  # AMQP端口
curl http://<您的服务器IP>:15672 # 管理界面(需返回HTML)

6.配置远程登陆用户

7.配置后即可登录

8.配置VirtulHost

在 RabbitMQ 中,Virtual Host(虚拟主机,简称 vhost )是一种逻辑隔离机制,用于在同一个 RabbitMQ 实例中创建多个独立的环境,类似于在一台物理服务器上运行多个虚拟服务器。它有以下作用:

实现多租户隔离

在同一台 RabbitMQ 实例中,可运行多个逻辑上相互隔离的环境。不同租户(比如不同应用、团队等 )使用各自的虚拟主机。每个虚拟主机拥有独立的队列、交换器、绑定关系 ,避免不同应用或系统之间互相干扰。例如,多个业务线共用一个 RabbitMQ 实例,通过虚拟主机实现各业务线消息通信的隔离。

便于权限管理

能为每个虚拟主机设置独立的用户权限。可对不同用户赋予访问特定虚拟主机的权限,限制其只能在该虚拟主机内创建或操作队列、交换器等资源,增强系统安全性。比如,只允许某个用户在特定虚拟主机中发送消息,但不允许其创建队列。

实现资源隔离

各虚拟主机内的队列、交换器和绑定关系相互独立,不会与其他虚拟主机混淆,确保不同应用的消息资源不会相互干扰、误用。

独立管理和监控

每个虚拟主机的队列、交换器等资源都能独立监控和管理。管理员可分别对不同虚拟主机进行配置、优化,而不影响其他虚拟主机。例如,针对开发、测试、生产等不同环境的虚拟主机,分别调整消息队列的参数。

适用不同使用场景

  • 隔离不同应用:当有多个应用使用 RabbitMQ,且应用间不相关或不能互相影响时,为每个应用创建单独虚拟主机。如一个企业的订单系统、库存系统分别使用不同虚拟主机。

  • 分配给不同团队:大型组织中,不同团队共享 RabbitMQ 实例,为各团队创建独立虚拟主机,保障其队列、交换器等资源互不干扰。

  • 环境分离:将开发、测试和生产等环境通过虚拟主机进行逻辑隔离,各环境使用自己的虚拟主机,确保不同阶段的消息交互不会相互影响。

9.C#代码案例-生产者

  public static void SendMessage(){var factory = new ConnectionFactory(){HostName = "40.161.118.219", // 替换为腾讯云轻量服务器公网IPPort = 5672,               // RabbitMQ 默认端口UserName = "admin",        // 替换为实际用户名Password = "admin123",     // 替换为实际密码VirtualHost = "my_vhost",        // 默认虚拟主机// 如需SSL加密,添加以下配置:// Ssl = new SslOption { Enabled = true, ServerName = "你的服务器IP" }};using (var connection = factory.CreateConnection())using (var channel = connection.CreateModel()){// 声明队列(如果不存在则创建)channel.QueueDeclare(queue: "hello2",durable: false,       // 是否持久化exclusive: false,autoDelete: false,arguments: null);// 发送消息string message = "Hello RabbitMQ from .NET 7!";var body = Encoding.UTF8.GetBytes(message);channel.BasicPublish(exchange: "",routingKey: "hello",basicProperties: null,body: body);Console.WriteLine($" [x] Sent: {message}");}}

10.C#代码案例-消费者

public static void ReceiveMessage()
{var factory = new ConnectionFactory(){HostName = "40.161.118.219", // 替换为腾讯云轻量服务器公网IPPort = 5672,               // RabbitMQ 默认端口UserName = "admin",        // 替换为实际用户名Password = "admin123",     // 替换为实际密码VirtualHost = "my_vhost",        // 默认虚拟主机// 如需SSL加密,添加以下配置:// Ssl = new SslOption { Enabled = true, ServerName = "你的服务器IP" }};using (var connection = factory.CreateConnection())using (var channel = connection.CreateModel()){channel.QueueDeclare(queue: "hello",durable: false,exclusive: false,autoDelete: false,arguments: null);var consumer = new EventingBasicConsumer(channel);consumer.Received += (model, ea) =>{var body = ea.Body.ToArray();var message = Encoding.UTF8.GetString(body);Console.WriteLine($" [x] Received: {message}");};channel.BasicConsume(queue: "hello",autoAck: true,      // 自动确认消息consumer: consumer);Console.WriteLine(" Press [Enter] to exit.");Console.ReadLine();}
}

11.查看队列信息

 

http://www.xdnf.cn/news/169543.html

相关文章:

  • 第十二章-PHP文件上传
  • 缺省处理、容错处理
  • 使用 OpenCV 和 dlib 进行人脸检测
  • 使用 Vue 3 开发桌面端应用的框架性能对比
  • golang goroutine(协程)和 channel(管道) 案例解析
  • 【Java】jdk动态代理
  • Flink02-学习-套接字分词
  • Web前端开发:CSS Float(浮动)与 Positioning(定位)
  • 数据结构——二叉树和堆(万字,最详细)
  • 【AI论文】RefVNLI:迈向可扩展的主题驱动文本到图像生成评估
  • SLAM技术:从原理到应用的全面解析
  • 计算机网络 | 应用层(6) -- 套接字编程
  • Java自定义注解详解
  • 「Mac畅玩AIGC与多模态01」架构篇01 - 展示层到硬件层的架构总览
  • 深度学习常见框架:TensorFlow 与 PyTorch 简介与对比
  • 在 Ubuntu 24.04 系统上安装和管理 Nginx
  • body Param Query 三个 不同的入参 分别是什么意思 在前端 要怎么传 这三种不同的参数
  • DAY7-C++进阶学习
  • Python爬虫课程实验指导书
  • 麒麟系统搭建离线NTP服务器,让局域网内windows系统同步其时间,并付排错避坑思路
  • Android Studio中创建第一个Flutter项目
  • 前端性能优化面试回答技巧
  • django admin 去掉新增 删除
  • 【愚公系列】《Manus极简入门》005-DeepSeek与Manus的创新之处
  • PostSwigger Web 安全学习:CSRF漏洞3
  • C# 利用log4net 工作台打印和保存到文件
  • 央视两次采访报道爱藏评级,聚焦生肖钞市场升温,评级币成交易安全“定心丸”
  • C# 类的基本概念(类成员)
  • 16bit 高精度低延时霍尔角度编码器,KTH7824,替代MA730
  • 高自由度与多功能指尖设计:Allegro灵巧手V5(4F Plus)的技术亮点