Как предотвратить автоматическое создание очередиJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как предотвратить автоматическое создание очереди

Сообщение Anonymous »

Я создаю микросервис и не хочу, чтобы он автоматически создавал очереди в RabbitMQ.
Я создал пользователя RabbitMQ через графический интерфейс, без разрешений на настройку, только на чтение и запись, чтобы избежать создания очередей.



Виртуальный хост
Настройка регулярного выражения
Запись регулярного выражения
Чтение регулярного выражения




/
^$
.*
.*



Поэтому я настроил потребителя JMS для очереди:
@Component
public class MessageConsumer {
@JmsListener(destination = "${rabbitmq.queueName}")
public void onMessage(Message message) throws JMSException {
//logic here
}
}

При запуске приложения возникает следующая ошибка, хотя очередь существует:

com.rabbitmq.client.ShutdownSignalException: ошибка канала; метод протокола: #method(reply-code=403, ответ-текст=ACCESS_REFUSED - настройка доступа к обмену 'jms.durable.queues' в vhost '/' отклонена для пользователя 'app-user', class-id=40, Method-id=10)

Очевидно, JMS требует разрешения на создание очереди.
Если Я меняю «Настроить регулярное выражение» на «.*», ошибка исчезает, но очередь создается автоматически, если она не существует.
Есть ли способ предотвратить автоматическое создание очередей с помощью JMS и RabbitMQ?
Я не могу допустить опечатки в имени очереди в файле конфигурации для создания новой очереди, что приведет к генерации тихой ошибки, которую трудно отследить.
Это bean-компонент настройки:
@Configuration
@EnableJms
public class MessageConfiguration {
@Bean
public ConnectionFactory createConnectionFactory(//
@Value("${rabbitmq.host}") String host, //
@Value("${rabbitmq.port}") int port, //
@Value("${rabbitmq.vhost}") String vhost, //
@Value("${rabbitmq.username}") String username, //
@Value("${rabbitmq.password}") String password//
) {
RMQConnectionFactory factory = new RMQConnectionFactory();
factory.setHost(host);
factory.setPort(port);
factory.setVirtualHost(vhost);
factory.setUsername(username);
factory.setPassword(password);
return factory;
}

@Bean
public JmsTemplate createJmsTemplate(@Autowired ConnectionFactory connectionFactory,
@Autowired MessageConverter messageConverter) {
JmsTemplate template = new JmsTemplate(connectionFactory);
template.setMessageConverter(messageConverter);
return template;
}

@Bean
public DefaultJmsListenerContainerFactory jmsListenerContainerFactory(
@Autowired ConnectionFactory connectionFactory, @Autowired MessageConverter messageConverter) {
DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
factory.setConnectionFactory(connectionFactory);
factory.setMessageConverter(messageConverter);
factory.setSessionTransacted(true);
return factory;
}

@Bean
public MessageConverter createMessageConverter() {
JacksonJsonMessageConverter converter = new JacksonJsonMessageConverter(//
JsonMapper.builder()//
.changeDefaultPropertyInclusion(i -> i.withValueInclusion(JsonInclude.Include.NON_NULL))//
.build());
converter.setTargetType(MessageType.TEXT);
converter.setTypeIdPropertyName("type");
return converter;
}
}
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»