客户端向RabbitMQ发送消息的端口及配置可行性技术问询
RabbitMQ客户端端口相关问题解答
背景代码
你提供的RabbitMQ发布者实现代码如下:
class RabbitMqPublisher { private IAdvancedBus _advancedBus; public RabbitMqPublisher() { _advancedBus = RabbitHutch.CreateBus("host=rabbitmq-server:5672;virtualHost=/;username=user;password=pass").Advanced; } public void PublishMessage(string message) { var routingKey = "SimpleMessage"; // declare some objects var queue = _advancedBus.QueueDeclare("TestQueue.SimpleMessage"); var exchange = _advancedBus.ExchangeDeclare("TestExchange.SimpleMessage", ExchangeType.Direct); var binding = _advancedBus.Bind(exchange, queue, routingKey); _advancedBus.Publish(exchange, routingKey, true, new Message<string>(message)); } }
问题解答
客户端发送消息使用的端口
默认情况下,客户端发送消息时使用的是操作系统自动分配的临时端口(不同系统的临时端口范围略有差异,比如Windows通常为49152-65535,Linux通常为32768-65535)。这个端口是客户端本地随机选取的未被占用的端口,用于和RabbitMQ服务器的5672端口建立TCP连接。
是否可以配置客户端端口
可以配置。因为你使用的是EasyNetQ框架,通过构建ConnectionConfiguration对象并指定LocalPort属性,就能固定客户端使用的端口。修改后的代码示例如下:
class RabbitMqPublisher { private IAdvancedBus _advancedBus; public RabbitMqPublisher() { var config = new ConnectionConfiguration { Hosts = new List<HostConfiguration> { new HostConfiguration { Host = "rabbitmq-server", Port = 5672 } }, VirtualHost = "/", UserName = "user", Password = "pass", LocalPort = 12345 // 指定客户端使用的本地端口 }; _advancedBus = RabbitHutch.CreateBus(config).Advanced; } public void PublishMessage(string message) { var routingKey = "SimpleMessage"; var queue = _advancedBus.QueueDeclare("TestQueue.SimpleMessage"); var exchange = _advancedBus.ExchangeDeclare("TestExchange.SimpleMessage", ExchangeType.Direct); var binding = _advancedBus.Bind(exchange, queue, routingKey); _advancedBus.Publish(exchange, routingKey, true, new Message<string>(message)); } }
注意:指定的本地端口必须是客户端本地未被其他进程占用的端口,否则会抛出连接失败的异常。
内容的提问来源于stack exchange,提问作者meJustAndrew
相关产品推荐
相关产品推荐

