我們在Azure上移植我們的軟件時遇到一些問題。我們的解決方案由2個網站(前端,後端)和webjob(安裝在我們硬件上的win服務)組成。這些節點使用RabbitMQ集羣(2個Ubuntu VM)進行通信。 的處所,我們沒有任何問題,但在Azure上安裝的時候,我們看到像許多錯誤:Azure上的RabbitMQ連接超時
Publisher did not confirm message
或
Publish not confirmed before channel closed
或
SocketException: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 104.40.186.27:5672
在RabbitMQ的,我們看到這幾樣錯誤:
closing AMQP connection <0.390.0> (100.73.204.90:61152 -> 100.73.205.2:5672):
{handshake_timeout,handshake}
結果是通常郵件沒有被正確接收。
我們在RabbitMQ之上使用MassTransit進行實際消息交換。 這裏我們設置環境的過程:
我們首先在相同的雲服務上創建2個Ubuntu 14.04虛擬機(A3:4核,7 GB)。 我們使用端口5672和15672的負載均衡器創建2個公共端點。我們的客戶端託管在同一地區的Azure網站內。
這裏我們powershel腳本來創建2 VM:
$imageName = "b39f27a8b8c64d52b05eac6a62ebad85__Ubuntu-14_04_1-LTS-amd64-server-20140927-en-us-30GB"
$vmc = New-AzureVMConfig -Name $machineName -InstanceSize "Small" -Image $imageName -AvailabilitySetName $serviceName
$null = $vmc | Add-AzureProvisioningConfig -Linux -LinuxUser $user -Password $password
$null = $vmc | New-AzureVM -ServiceName $serviceName -WaitForBoot
$vm = Get-AzureVM -Name $machineName -ServiceName $serviceName
$null = Add-RabbitMQEndpoint -vm $vm -port 5672 -name "RabbitMQ-Main"
$null = Add-RabbitMQEndpoint -vm $vm -port 15672 -name "RabbitMQ-Mgmt"
$null = $vm | Update-AzureVM
Function Add-RabbitMQEndpoint($vm,$port,$name)
{
$lbName = $name + "_LB"
$null = Add-AzureEndpoint -VM $vm -LocalPort $port -PublicPort $port -Name $name -Protocol tcp -LBSetName $lbName -ProbePort $port -ProbeProtocol tcp -ProbeIntervalInSeconds 15
}
然後我們運行下面的腳本到兩個機器上安裝的RabbitMQ:
sudo add-apt-repository 'deb http://www.rabbitmq.com/debian/ testing main'"
sudo apt-get update
sudo apt-get -q -y --force-yes install rabbitmq-server=3.4.1-1
sudo invoke-rc.d rabbitmq-server stop
echo 'MYCOOKIEVALUE' | sudo tee /var/lib/rabbitmq/.erlang.cookie
sudo chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
sudo chmod 400 /var/lib/rabbitmq/.erlang.cookie
sudo invoke-rc.d rabbitmq-server start
sudo rabbitmq-plugins enable rabbitmq_management
sudo invoke-rc.d rabbitmq-server stop
sudo invoke-rc.d rabbitmq-server start
sudo rabbitmqctl add_user user1 pwd1
sudo rabbitmqctl set_user_tags user1 administrator
sudo rabbitmqctl set_permissions -p/user1 '.*' '.*' '.*'
然後我們創建一個使用集羣:
sudo rabbitmqctl stop_app
sudo rabbitmqctl join_cluster [email protected]$mymachinename
sudo rabbitmqctl start_app
sudo rabbitmqctl set_cluster_name my_cluster_name
我們還沒有打開任何其他端口(如4369和25672),因爲我們假設第ese僅用於節點之間的內部通信。這是正確的? 我們使用雲服務主機名從客戶端連接到rabbitmq。我們也嘗試刪除集羣並連接到單個RabbitMQ虛擬機。
你有什麼想法嗎?似乎是某種超時問題?可能是網絡分區問題?
你的Ubuntu上配置了SSH服務器嗎?你可以連接到其中一個虛擬機,並嘗試通過SSH連接到第二個虛擬機(以查看是否有任何網絡可見性)? – b2zw2a 2014-11-14 17:24:37
@plentysmart是的,我試過了,似乎機器之間的連接是好的。另外,因爲clustet是正確的,我也試過沒有集羣,但使用一個vm for rabbitmq,但問題仍然存在。 – 2014-11-14 19:44:10
也有同樣的問題。你有沒有設法克服它們? – 2014-12-01 02:29:00