Spring AMQP:具有机器名称的队列

时间:2014-04-03 19:26:12

标签: java spring spring-el spring-amqp

我正在使用Spring AMQP在RabbitMQ中创建队列。我想要一个队列,其名称包括运行该应用程序的计算机的名称。所以队列名称可能是" fooQueue.host1"或" fooQueue.host2"取决于您运行应用程序的位置。

我已经找到了一种方法(详见下文),但似乎有点复杂。是否有更简单/更好/更好的方式来实现这一目标?

我的解决方案

首先创建一个bean来获取机器名称:

public class MachineNamePropertyBean {
    public String GetMachineName() throws UnknownHostException {
        InetAddress localMachine = InetAddress.getLocalHost();
        return localMachine.getHostName();
    }
}

然后在Spring配置中注册bean:

<bean id="machineNameBean" class="com.example.myapp.MachineNamePropertyBean" />

然后在你的Spring AMQP配置中使用它:

<rabbit:queue id="fooQueue"
              name="fooQueue.#{ machineNameBean.GetMachineName() }"
              durable="false"
              auto-delete="false"
              exclusive="false" />

1 个答案:

答案 0 :(得分:2)

除非使用SpEL,否则没有其他解决方案:

<bean id="machineName" class="java.lang.String">
   <constructor-arg value="#{T(java.net.InetAddress).localHost.hostName}"/>
</bean>

<rabbit:queue id="fooQueue"
              name="fooQueue.#{ machineName }"
              durable="false"
              auto-delete="false"
              exclusive="false" />

与您一样,但没有新课程和通过SpEL功能。