当前位置: 首页 > 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.查看队列信息

 

相关文章:

  • 基于定制开发开源AI智能名片S2B2C商城小程序的会员存量池构建策略研究
  • 区块链基石解码:分布式账本的运行奥秘与技术架构
  • 助力产业升级 | BMC安全启动方案上新了!
  • Mysql从入门到精通day6————时间和日期函数精讲
  • 【PINN】DeepXDE学习训练营(6)——function-mf_func.py
  • Redis远程链接应用案例
  • 打造企业级AI文案助手:GPT-J+Flask全栈开发实战
  • CSDN编辑文章时如何自动生成目录
  • 【软件工程】 白盒测试简介
  • Java高频常用工具包汇总
  • pyspark将hive数据写入Excel文件中
  • 淘宝商品主图标题api接口
  • Word处理控件Spire.Doc系列教程:C# 通过模板创建 Word 文档
  • leetcode0175. 组合两个表-easy
  • AXPM60631: 用于AMOLED显示屏的200mA双路DC-DC电源管理芯片
  • body Param Query 三个 不同的入参 分别是什么意思 在前端 要怎么传 这三种不同的参数
  • git回退commit
  • Flink维表深度解析
  • python 里有冒泡排序吗
  • 【MQ篇】RabbitMQ之消费失败重试!
  • 马上评|“AI神医宇宙”欺诈,连演员都不请了
  • 加拿大驾车撞人事件遇难人数升到11人
  • 上海质子重离子医院已收治8000例患者,基本覆盖国内常见恶性肿瘤
  • 我国首个大型通用光谱望远镜JUST在青海启动建设
  • 印方称与巴基斯坦军队在克什米尔交火
  • 视频丨伊朗阿巴斯港一处油罐发生高强度爆炸:造成大面积破坏,伤亡不明