Я хотел бы использовать новые аннотации и функции, представленные в Spring 4.1 для приложения, которое нуждается в прослушивании JMS.
Я внимательно прочитал примечания в сообщении Spring 4.1 JMS, но я продолжаю пропустить связь между @JmsListener
и возможно, DestinationResolver
и как настроить приложение, чтобы указать правильные Destination
или Endpoint
.
Вот рекомендуемое использование @JmsListener
@Component
public class MyService {
@JmsListener(containerFactory = "myContainerFactory", destination = "myQueue")
public void processOrder(String data) { ... }
}
Теперь я не могу использовать это в своем фактическом коде, потому что "myQueue" необходимо прочитать из файла конфигурации с помощью Environment.getProperty()
.
Я могу настроить соответствующий myContainerFactory с помощью DestinationResolver
, но в основном, кажется, вы просто используете DynamicDestinationResolver
, если вам не нужен JNDI для поиска очереди на сервере приложений, и вам не нужно было делать какие-либо пользовательские логика ответа. Я просто пытаюсь понять, как Spring хочет, чтобы я указывал имя очереди в параметризованной форме, используя аннотацию @JmsListener
.
Далее в блоге я найду ссылку на этот конфигуратор:
@Configuration
@EnableJms
public class AppConfig implements JmsListenerConfigurer {
@Override
public void configureJmsListeners(JmsListenerEndpointRegistrar registrar) {
registrar.setDefaultContainerFactory(defaultContainerFactory());
SimpleJmsListenerEndpoint endpoint = new SimpleJmsListenerEndpoint();
endpoint.setDestination("anotherQueue");
endpoint.setMessageListener(message -> {
// processing
});
registrar.registerEndpoint(endpoint);
}
Теперь это имеет некоторое значение, и я мог видеть, где это позволит мне установить Destination во время выполнения из какой-либо внешней строки, но это, похоже, противоречит использованию @JmsListener
, поскольку оно, кажется, переопределяет аннотации в пользу endpoint.setMessageListener
в приведенном выше коде.
Любые советы о том, как указать подходящее имя очереди с помощью @JmsListener
?