2013-03-18 43 views
2

我試着用spring amqp應用程序將消息作爲消息發送給消費者(用Ruby編寫)。春季兔子不允許在緩存連接工廠配置中覆蓋默認設置:release 1.1.4

我與我嘗試

注意任何設置連接重置錯誤:我刪除默認的guest用戶,並擁有超過默認的虛擬主機相同的權限添加管理員。

這裏的配置:

<beans:bean id="cachingConnectionFactory" 
    class="org.springframework.amqp.rabbit.connection.CachingConnectionFactory"> 
    <beans:property name="channelCacheSize" value="5" /> 
    <beans:property name="username" value="admin" /> 
    <beans:property name="password" value="admin" /> 
</beans:bean> 

<rabbit:queue id='analytics.persistence.queue' name='analytics.persistence.queue' /> 

<rabbit:direct-exchange name="amq.direct"> 
    <rabbit:bindings> 
     <rabbit:binding queue="analytics.persistence.queue"> 
     </rabbit:binding> 
    </rabbit:bindings> 
</rabbit:direct-exchange> 

<rabbit:connection-factory id="cachingConnectionFactory" /> 

<rabbit:admin connection-factory="cachingConnectionFactory" /> 

<beans:bean id="rabbitTemplate" 
    class="org.springframework.amqp.rabbit.core.RabbitTemplate"> 
    <beans:property name="connectionFactory" ref="cachingConnectionFactory" /> 
    <beans:property name="exchange" value="amq.direct" /> 
    <beans:property name="routingKey" value="analytics.persistence.queue"/> 
</beans:bean> 

<beans:bean id="analyticsMessageProducer" 
    class="hoodibaba.analytics.publish.AnalyticsPersistenceMessageProducer"> 
    <beans:property name="rabbitTemplate" ref="rabbitTemplate" /> 
</beans:bean> 

而且在我的製片類

public class AnalyticsPersistenceMessageProducer extends RabbitGatewaySupport implements 
    AnalyticsPersistenceMessageGateway { 

    private static final Logger logger = LoggerFactory.getLogger(AnalyticsPersistenceMessageProducer.class); 

    @Override 
    public void sendAnalyticsMessage(String jsonData) { 
    try { 
     getRabbitTemplate().convertAndSend("analytics.persistence.queue",jsonData); 
    } catch (AmqpException e) { 
     logger.error(e.getMessage()); 
     logger.error("Exception Stacktrace",e); 
     logger.error("flushing JSON data to logs: " + jsonData); 
    } 
    } 

} 

我得到一個

com.rabbitmq.client.PossibleAuthenticationFailureException:可能 由認證失敗引起的異常

堆棧跟蹤顯示連接重置

Caused by: com.rabbitmq.client.PossibleAuthenticationFailureException: Possibly caused by authentication failure 
    at com.rabbitmq.client.impl.AMQConnection.start(AMQConnection.java:348) 
    at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:516) 
    at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:545) 
    at org.springframework.amqp.rabbit.connection.AbstractConnectionFactory.createBareConnection(AbstractConnectionFactory.java:160) 
    ... 43 more 
Caused by: com.rabbitmq.client.ShutdownSignalException: connection error; reason: java.net.SocketException: Connection reset 
    at com.rabbitmq.utility.ValueOrException.getValue(ValueOrException.java:67) 
    at com.rabbitmq.utility.BlockingValueOrException.uninterruptibleGetValue(BlockingValueOrException.java:33) 
    at com.rabbitmq.client.impl.AMQChannel$BlockingRpcContinuation.getReply(AMQChannel.java:343) 
    at com.rabbitmq.client.impl.AMQChannel.privateRpc(AMQChannel.java:216) 
    at com.rabbitmq.client.impl.AMQChannel.rpc(AMQChannel.java:202) 
    at com.rabbitmq.client.impl.AMQConnection.start(AMQConnection.java:340) 
    ... 46 more 
Caused by: java.net.SocketException: Connection reset 
    at java.net.SocketInputStream.read(SocketInputStream.java:189) 
    at java.net.SocketInputStream.read(SocketInputStream.java:121) 
    at java.io.BufferedInputStream.fill(BufferedInputStream.java:235) 
    at java.io.BufferedInputStream.read(BufferedInputStream.java:254) 
    at java.io.DataInputStream.readUnsignedByte(DataInputStream.java:288) 
    at com.rabbitmq.client.impl.Frame.readFrom(Frame.java:95) 
    at com.rabbitmq.client.impl.SocketFrameHandler.readFrame(SocketFrameHandler.java:131) 
    at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:508) 

消息消費者如下

#!/usr/bin/env ruby 
# encoding: UTF-8 
require 'bunny' 

conn = Bunny.new("amqp://admin:[email protected]:5672") 
conn.start 

ch = conn.create_channel 
puts 'channel created' 
q = ch.queue("analytics.persistence.queue",:exclusive => false, :auto_delete => false) 
x = ch.direct("amq.direct") 
q.bind(x) 
q.subscribe(:block => true, :ack => true) do |delivery_info, properties, payload| 
    puts "Received #{payload}, message properties are #{properties.inspect}" 
end 
ch.close 
con.close 

更新:似乎更新的用戶名和密碼設置不能傳播,兔日誌顯示我的應用程序仍然使用guest

=ERROR REPORT==== 19-Mar-2013::00:16:12 === 
closing AMQP connection <0.13815.0> (127.0.0.1:44736 -> 127.0.0.1:5672): 
{handshake_error,starting,0, 
       {amqp_error,access_refused, 
          "PLAIN login refused: user 'guest' - invalid credentials", 
          'connection.start_ok'}} 

回答

0

(OP在帖子中編輯了答案。見Question with no answers, but issue solved in the comments (or extended in chat)

的OP寫道:

的問題是在我的配置;高速緩存連接工廠使用bean命名空間和rabbit namespcace來定義,後者使用默認值。更改爲以下配置,並且我不再收到連接重置錯誤

<rabbit:queue id='analytics.persistence.queue' name='analytics.persistence.queue' /> 

<rabbit:direct-exchange name="amq.direct"> 
    <rabbit:bindings> 
     <rabbit:binding queue="analytics.persistence.queue"> 
     </rabbit:binding> 
    </rabbit:bindings> 
</rabbit:direct-exchange> 

<rabbit:connection-factory id="cachingConnectionFactory" 
    username="analytics" password="analytics" channel-cache-size="5" 
    virtual-host="analytics" /> 

<rabbit:admin connection-factory="cachingConnectionFactory" /> 

<beans:bean id="rabbitTemplate" 
    class="org.springframework.amqp.rabbit.core.RabbitTemplate"> 
    <beans:property name="connectionFactory" ref="cachingConnectionFactory" /> 
    <beans:property name="exchange" value="amq.direct" /> 
    <beans:property name="queue" value="analytics.persistence.queue" /> 
    <beans:property name="routingKey" value="save.analytics"></beans:property> 
</beans:bean> 

<beans:bean id="analyticsMessageProducer" 
    class="hoodibaba.analytics.publish.AnalyticsPersistenceMessageProducer" 
    autowire="byName" /> 
相關問題