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 id="machineNameBean" class="com.example.myapp.MachineNamePropertyBean" />

затем используйте его в конфигурации Spring AMQP следующим образом:

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

person Brian Reischl    schedule 03.04.2014    source источник


Ответы (1)


Нет другого решения, кроме использования 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.

person Artem Bilan    schedule 03.04.2014
comment
Он использует на один класс меньше, и все это можно сделать в одном файле конфигурации, поэтому я бы сказал, что это проще и лучше. Спасибо! - person Brian Reischl; 04.04.2014