2011-12-31 35 views
3

我有兩個流浪機器。第一個叫做「web」,包含一個小的Ruby應用程序,第二個叫做「mq」,安裝了ActiveMQ。我無法將我的應用程序連接到ActiveMQ。爲什麼STOMP,ActiveMQ和Vagrant不能在我的系統上工作?

流浪配置文件:

config.vm.define :web do |web_config| 
    web_config.vm.network("33.33.33.10") 
    web_config.vm.box = "lucid32" 
    config.ssh.forwarded_port_key = "ssh" 
    config.vm.forward_port("ssh", 22, 2223) 
    web_config.vm.forward_port "http", 3000, 3000 
end 

config.vm.define :mq do |mq_config| 
    mq_config.vm.network("33.33.33.50") 
    mq_config.vm.box = "lucid32" 
    config.ssh.forwarded_port_key = "ssh" 
    config.vm.forward_port("ssh", 22, 2223) 
    mq_config.vm.forward_port "activemq", 8161, 8161 
    mq_config.vm.forward_port "stomp", 61613, 61613 
end 

位於我的 「網絡」 的機器上我的紅寶石踐踏應用:

require "rubygems" 
require 'stomp' 

hash = { 
    :hosts => [ 
     {:login => "", :passcode => "", :host => "33.33.33.50", :port => 61613, :ssl => false}]} 
queue = "/queue/test" 
client = Stomp::Client.new() 
client.subscribe queue do | message | 
    puts "#{message}" 
end 
client.join 

ActiveMQ的配置文件(activemq.xml):

<!-- Allows us to use system properties as variables in this configuration file --> 
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/> 

<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.base}/data"> 

    <!-- Destination specific policies using destination names or wildcards --> 
    <destinationPolicy> 
     <policyMap> 
      <policyEntries> 
       <policyEntry queue=">" memoryLimit="5mb"/> 
       <policyEntry topic=">" memoryLimit="5mb"> 
        <dispatchPolicy> 
         <strictOrderDispatchPolicy/> 
        </dispatchPolicy> 
        <subscriptionRecoveryPolicy> 
         <lastImageSubscriptionRecoveryPolicy/> 
        </subscriptionRecoveryPolicy> 
       </policyEntry> 
      </policyEntries> 
     </policyMap> 
    </destinationPolicy> 

    <!-- Use the following to configure how ActiveMQ is exposed in JMX --> 
    <managementContext> 
     <managementContext createConnector="true"/> 
    </managementContext> 

    <persistenceAdapter> 
     <amqPersistenceAdapter syncOnWrite="false" directory="${activemq.base}/data" maxFileLength="20 mb"/> 
    </persistenceAdapter> 

<sslContext> 
     <sslContext keyStore="file:${activemq.base}/conf/broker.ks" keyStorePassword="password" trustStore="file:${activemq.base}/conf/broker.ts" trustStorePassword="password"/> 
    </sslContext> 

    <!-- The maximum about of space the broker will use before slowing down producers --> 
    <systemUsage> 
     <systemUsage> 
      <memoryUsage> 
       <memoryUsage limit="20 mb"/> 
      </memoryUsage> 
      <storeUsage> 
       <storeUsage limit="1 gb" name="foo"/> 
      </storeUsage> 
      <tempUsage> 
       <tempUsage limit="100 mb"/> 
      </tempUsage> 
     </systemUsage> 
    </systemUsage> 


    <!-- The transport connectors ActiveMQ will listen to --> 
    <transportConnectors> 
     <transportConnector name="openwire" uri="tcp://0.0.0.0:61616" /> 
     <transportConnector name="ssl" uri="ssl://0.0.0.0:61617" /> 
     <transportConnector name="stomp" uri="stomp://0.0.0.0:61613" /> 
     <transportConnector name="xmpp" uri="xmpp://0.0.0.0:61222" /> 
    </transportConnectors> 

</broker> 

<!-- An embedded servlet engine for serving up the Admin console --> 
<jetty xmlns="http://mortbay.com/schemas/jetty/1.0"> 
    <connectors> 
     <nioConnector port="8161"/> 
    </connectors> 

    <handlers> 
     <webAppContext contextPath="/admin" resourceBase="${activemq.base}/webapps/admin" logUrlOnStart="true"/> 
     <webAppContext contextPath="/demo" resourceBase="${activemq.base}/webapps/demo" logUrlOnStart="true"/> 
     <webAppContext contextPath="/fileserver" resourceBase="${activemq.base}/webapps/fileserver" logUrlOnStart="true"/> 
    </handlers> 
</jetty> 

機器可以相互溝通。

從機 「網」:

[email protected]:/vagrant$ ping 33.33.33.50 
PING 33.33.33.50 (33.33.33.50) 56(84) bytes of data. 
64 bytes from 33.33.33.50: icmp_seq=1 ttl=64 time=0.479 ms 
64 bytes from 33.33.33.50: icmp_seq=2 ttl=64 time=0.726 ms 
64 bytes from 33.33.33.50: icmp_seq=3 ttl=64 time=0.687 ms 

從機 「MQ」:

[email protected]:~$ ping 33.33.33.10 
PING 33.33.33.10 (33.33.33.10) 56(84) bytes of data. 
64 bytes from 33.33.33.10: icmp_seq=1 ttl=64 time=0.383 ms 
64 bytes from 33.33.33.10: icmp_seq=2 ttl=64 time=0.856 ms 
64 bytes from 33.33.33.10: icmp_seq=3 ttl=64 time=0.660 ms 

最後,當我試圖執行的應用程序,我得到這個錯誤:

[email protected]:/vagrant$ ruby stomp_client.rb 
/home/vagrant/.rvm/gems/ruby-1.9.2-p290/gems/stomp-1.1.9/lib/stomp/connection.rb:481:in `initialize': Connection refused - connect(2) (Errno::ECONNREFUSED) 
    from /home/vagrant/.rvm/gems/ruby-1.9.2-p290/gems/stomp-1.1.9/lib/stomp/connection.rb:481:in `open' 
    from /home/vagrant/.rvm/gems/ruby-1.9.2-p290/gems/stomp-1.1.9/lib/stomp/connection.rb:481:in `open_tcp_socket' 
    from /home/vagrant/.rvm/gems/ruby-1.9.2-p290/gems/stomp-1.1.9/lib/stomp/connection.rb:522:in `open_socket' 
    from /home/vagrant/.rvm/gems/ruby-1.9.2-p290/gems/stomp-1.1.9/lib/stomp/connection.rb:120:in `block in socket' 
    from <internal:prelude>:10:in `synchronize' 
    from /home/vagrant/.rvm/gems/ruby-1.9.2-p290/gems/stomp-1.1.9/lib/stomp/connection.rb:113:in `socket' 
    from /home/vagrant/.rvm/gems/ruby-1.9.2-p290/gems/stomp-1.1.9/lib/stomp/connection.rb:89:in `initialize' 
    from /home/vagrant/.rvm/gems/ruby-1.9.2-p290/gems/stomp-1.1.9/lib/stomp/client.rb:94:in `new' 
    from /home/vagrant/.rvm/gems/ruby-1.9.2-p290/gems/stomp-1.1.9/lib/stomp/client.rb:94:in `initialize' 
    from stomp_client.rb:28:in `new' 
    from stomp_client.rb:28:in `<main>' 
+0

你確保機器上的那些特定端口的防火牆上打開? – 2012-01-02 17:18:13

+0

有兩個Ubuntu 10.04虛擬機(VirtualBox)通過主機專用網絡進行通信。兩臺機器都禁用UFW。有任何想法嗎?韓國社交協會。 – melqui 2012-01-02 20:23:44

回答

2

看來你忘了將你的哈希傳遞給Stomp :: Client.new()方法,因此它默認爲localhost。

它應該是這樣的:

client = Stomp::Client.new(hash) 
相關問題