RabbitMQ无效凭据与有效信息



我正在使用一些Java/Spring web应用程序和RabbitMQ。我在地址192.168.0.101相同的 tomcat服务器上有App1和App2。它们都与位于:192.168.0.100的RabbitMQ服务器通信。

App1在spring上下文中有如下配置:

<bean id="connectionFactory"
    class="org.springframework.amqp.rabbit.connection.CachingConnectionFactory"
    destroy-method="destroy">
    <property name="host" value="192.168.0.100" />
    <property name="username" value="app" />
    <property name="password" value="guest" />
    <property name="virtualHost" value="/" />
</bean>

App2具有相同的配置,只是用户名不同,例如:

<bean id="connectionFactory"
    class="org.springframework.amqp.rabbit.connection.CachingConnectionFactory"
    destroy-method="destroy">
    <property name="host" value="192.168.0.100" />
    <property name="username" value="app2" />
    <property name="password" value="guest" />
    <property name="virtualHost" value="/" />
</bean>

问题是App1可以成功连接到RabbitMQ服务器,而App2在RabbitMQ日志中总是出现invalid credentials错误。

以下是这些用户的权限列表:

Listing permissions in vhost "/" ...
app    .*    .*    .*
app2   .*    .*    .*

当我尝试使用API(两个用户)登录时,我得到的是:curl -i -u app:guest http://192.168.0.100:15672/api/whoamicurl -i -u app2:guest http://192.168.0.100:15672/api/whoami

HTTP/1.1 401 Unauthorized
Server: MochiWeb/1.1 WebMachine/1.10.0 (never breaks eye contact)
Date: Mon, 30 Jun 2014 14:58:37 GMT
Content-Length: 57
{"error":"not_authorised","reason":"Not management user"}

看起来很正常,我认为,每个用户都被认为是有效的用户,但没有被授权进行管理。当我为app2设置管理标记时,得到如下内容:

curl -i -u app2:guest http://192.168.0.100:15672/api/whoami
HTTP/1.1 200 OK
Server: MochiWeb/1.1 WebMachine/1.10.0 (never breaks eye contact)
Date: Mon, 30 Jun 2014 15:14:29 GMT
Content-Type: application/json
Content-Length: 80
Cache-Control: no-cache
{"name":"app2","tags":"management","auth_backend":"rabbit_auth_backend_internal"}

我知道这是很多代码,但这是我得到的全部,我打算放弃,永远不知道发生了什么。我真的不明白我做错了什么,因为配置看起来完全一样。

你觉得怎么样?

提前感谢!很多。

编辑:以下是我在app2尝试连接时得到的rabbitMq日志行:

=ERROR REPORT==== 30-Jun-2014::16:42:38 ===
closing AMQP connection <0.1241.0> (192.168.0.101:52871 -> 192.168.0.100:5672):
{handshake_error,starting,0,
             {amqp_error,access_refused,
                         "PLAIN login refused: user 'app2' - invalid credentials",
                         'connection.start_ok'}}

EDIT2:下面是app2尝试连接时的Java错误日志:

    Caused by: com.rabbitmq.client.PossibleAuthenticationFailureException: Possibly caused by authentication failure
        at com.rabbitmq.client.impl.AMQConnection.start(AMQConnection.java:355)
        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:181)
        ... 48 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:347)
        ... 51 more
    Caused by: java.net.SocketException: Connection reset
        at java.net.SocketInputStream.read(SocketInputStream.java:196)
        at java.net.SocketInputStream.read(SocketInputStream.java:122)
        ...

因为时间紧迫,我决定从服务器上卸载和清除Tomcat,重新安装,然后逐个放置每个应用程序。

你猜怎么着,它们都成功连接到RabbitMQ,没有任何警告/错误。

所以,如果这里有人知道一个特定的(外部)tomcat配置如何阻止一个应用程序与RabbitMQ通信,欢迎你…

这里的"外部"是指"与应用无关"的配置。我不是一个真正的Tomcat专家,我知道有很多文件和很多方法可以配置它,我仍然很想知道发生了什么。

最新更新