5、Connecting to RabbitMQ连接到RabbitMQ服务器
如果你熟悉关系数据库的连接,例如SQL Server连接。你会发现EasyNetQ的connections有点奇怪。关系数据库连接流程一般是:Client 打开一个连接, 发出一个SQL命令,如有必要处理结果,然后立即关闭连接。一般的建议是:在尽可能短的时间内保持连接的打开状态(用完即关),并使用连接池。
然而与RabbitMQ代理服务器进行消息传递就不一样了,因为连接打开往往要延续到应用程序的整个生命周期结束。通常你会打开一个连接创建一个订阅,保持这个打开的连接一直等待消息到来。EasyNetQ不能保证RabbitMQ服务代理在所有的时间都是可用的。相反它使用了延迟连接的方法,在后台线程轮询终结点,直到连接成功。假如服务器由于某种原因连接断开了(可能是网络故障,或许是RabbitMQ Server自身的原因断开了),EasyNetQ将恢复轮询终结点直到重新连接成功。
标准的做法是在你应用的生命周期内只创建一个IBus实例.当你的应用关闭时Dispose掉它。
延迟连接RabbitMQ服务器是通过实例化IBus接口完成的,实例化一个IBus如下。另外大部分EasyNetQ操作都是调用IBus的具体方法。
var bus = RabbitHutch.CreateBus("host=myServer;virtualHost=myVirtualHost;username=mike;password=topsecret")
这个连接字符串是由键值对组成,格式如下 key=value, 通过分号;分隔。只有一个必选的字段即:host.
可能会用到的键和值如下:
-
host(例如 host=localhost 或 host=192.168.2.56 或 host=myhost.mydomain.com)这个字段是必选的。如要具体指定你要连接服务器端口,你用标准格式 host:port(例如:host=myhost .com:5673)。假如你省略了端口号,AMQP默认端口是5672.连接到RabbitMQ集群,需要指定每一个集群节点用逗号分隔(例如:host:myhost1.com,myhost2.com,myhost3.com).更多详情请参考Cluster Support
-
virtualhost(例如:virtualHost=myVirturalHost)默认虚拟主机是'/'
-
username(例如:username=mike)默认是'guest'(对于非'localhost'主机你需要使用其他用户名)
-
password (例如:password=mysecret)默认为'guest'
-
requestedHearbeat(例如:requestHearbeat=10)默认为10秒钟。没有用到心跳设置为0
-
prefetchcount(例如:prefetchcount=1) 默认为50.这个值是在EasyNetQ发回ack确认之前,RabbitMQ可以发送给该消费者的消息数。不限制设置为0(不推荐). 为了在消费者之间保持公平和平衡最好设置为1.(就是如果一个消费者未ack确认,RabbitMQ将不再给它发消息,并尝试将队列中后续消息发给其他消费者)
-
publisherConfirms(例如:publisherconfirms=true)默认是false。 怎么设置要看Publisher Confirms?
-
persistentMessages(例如:persistentMessages=false)默认为true。这个决定了在发送消息时采用什么样的delivery_mode。 false=1,true=2. 设置为true,RabbitMQ将会把消息持久化到磁盘,并且在服务器重启后仍会存在。设置为false不持久化则可以提高性能效率。
-
product(例如:product=我的现实中重要的服务)在EasyNetQ 0.27.3中引进。默认值是实例化IBus的可执行文件的名称。这里输入的值将出现在RabbitMQ的管理界面中。
-
platform(例如:platform=my.fully.qualified.domain.name)在EasyNetQ 0.27.3中引进。默认值是运行客户端进程实例化IBus的PC的主机名。这里输入的值将出现在RabbitMQ的管理界面中。
-
timeout(例如:timeout=60)模式值为10秒。在EasyNet 0.17中引进。可解析类型为System.UInt16从0到65535范围内的值。不限制超时时间设置为0.当超时事时抛出System.TimeoutException.
关闭连接,只要简单的dispose,如下:
bus.Dispose();
这样就关闭了EasyNetQ使用过的连接、管道、消费者和所有其他资源。
原文地址:https://github.com/EasyNetQ/EasyNetQ/wiki/Connecting-to-RabbitMQ