如果你連接過關系數據庫,例如SQL Server。你會發現EasyNetQ處理connections有點奇怪。和關系數據庫通訊一直都是通過client開始的。Client 打開一個連接, 發出一個SQL命令,如有必要時,處理結果,然后關閉連接。一般建議是你維持一個打開的連接,時間要盡可能短,通過API斷開連接池。
諸如與RabbitMQ這樣的消息代理會話,是有些不同的,因為連接傾向於在應用的整個生命周期內保持連接狀態。通常你打開一個連接,創建一個訂閱,然后打開連接后,等待消息到來。EasyNetQ不能保證代理在所有的時間都是可用的。相反它使用了延遲連接的方法,在后台線程輪詢終結點,直到連接成功。假如服務器出於任何原因連接斷開了(可能是網絡故障,或許是RabbitMQ Server自身的原因斷開了),EasyNetQ將恢復輪詢終結點直到重新連接成功。
標准的做法是在你應用的生命周期內只創建一個IBus實例.當你的應用關閉后Dispose掉它。
延遲連接到RabbitMQ服務器是通過IBus接口表示的。大部分EasyNetQ操作都是IBus上的方法。創建一個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.
-
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中被引進。默認值是Bus的實例名。
此處輸入的值將顯示在RabbitMQ的后台管理界面中。 -
platform(例如:platform=my.fully.qualified.domain.name)在EasyNetQ 0.27.3中被引進。默認值是運行着客戶端處理Bus的實例的機器的主機名。此處輸入的值將會線上在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