Отключение канала RabbitMQ из-за ошибки канала с неизвестным тегом доставкиJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Отключение канала RabbitMQ из-за ошибки канала с неизвестным тегом доставки

Сообщение Anonymous »


Я вижу ошибку ниже после каждого сообщения, полученного от RabbitMQ,

Отключение канала: ошибка канала; метод протокола: #method(код ответа=406, текст ответа=PRECONDITION_FAILED – неизвестный тег доставки 1, идентификатор класса=60, идентификатор метода=80) 2024-01-03 11:07:23.807 INFO prod-node7-synergyoci-com - [cutor-1144] o.s.a.r.l.SimpleMessageListenerContainer -: перезапуск Consumer@3d5a462b: tags=[{amq.ctag-zGA1v36aEmXxnG7bqBUcdg=asstMgmt .queue}], канал =Кэшированный канал Rabbit: AMQChannel(amqp://[email protected]:5672/assetmgmt,1165), conn: Proxy@5c87dd9e Общее соединение Rabbit: SimpleConnection@2ec6c89 [delegate=amqp://[email protected]:5672 /assetmgmt, localPort= 55898], AcceptMode=AUTO размер локальной очереди=0

Сообщения не теряются, потребление и обработка в порядке, но, если указано выше, amqp://[email protected]:5672/assetmgmt,1165.. Было создано 1165 каналов. И это не останавливается на достигнутом, это продолжает происходить с каждым потребляемым сообщением.

Ниже моя конфигурация:

@Бин @Qualifier("amConnectionFactory") public ConnectionFactory ConnectionFactory() выдает NoSuchAlgorithmException, KeyManagementException { CachingConnectionFactory ConnectionFactory = новый CachingConnectionFactory (); ConnectionFactory.setHost(env.getProperty("assetMgmt.rabbitmq.host")); ConnectionFactory.setPort(Integer.valueOf(env.getProperty("assetMgmt.port"))); ConnectionFactory.setUsername(env.getProperty("assetMgmt.username")); ConnectionFactory.setPassword(env.getProperty("assetMgmt.password")); ConnectionFactory.setVirtualHost(env.getProperty("assetMgmt.virtual.host")); ConnectionFactory.setChannelCacheSize(5); //connectionFactory.setChannelCheckoutTimeout(100000); вернуть ConnectionFactory; } @Бин @Qualifier("umConnectionFactory") public ConnectionFactory umConnectionFactory() выдает NoSuchAlgorithmException, KeyManagementException { CachingConnectionFactory ConnectionFactory = новый CachingConnectionFactory (); ConnectionFactory.setHost(env.getProperty("spring.rabbitmq.host")); ConnectionFactory.setPort(Integer.valueOf(env.getProperty("spring.rabbitmq.port"))); ConnectionFactory.setVirtualHost(env.getProperty("spring.rabbitmq.virtual-host")); ConnectionFactory.setUsername(env.getProperty("spring.rabbitmq.username")); ConnectionFactory.setPassword(env.getProperty("spring.rabbitmq.password")); ConnectionFactory.setChannelCacheSize(5); //connectionFactory.setChannelCheckoutTimeout(100000); вернуть ConnectionFactory; } @Бин public SimpleRabbitListenerContainerFactory assetsContainerFactory( @Qualifier("connectionFactory") ConnectionFactory ConnectionFactory ) { Фабрика SimpleRabbitListenerContainerFactory = новый SimpleRabbitListenerContainerFactory (); Factory.setConnectionFactory(connectionFactory); фабрика.setConcurrentConsumers(3); Factory.setMaxConcurrentConsumers(6); Factory.setDefaultRequeueRejected(ложь); RabbitTemplate RabbitTemplate = новый RabbitTemplate (connectionFactory); RabbitTemplate.setChannelTransacted(истина); RabbitTemplate.setReplyTimeout(60000); возврат на завод; } @Бин public SimpleRabbitListenerContainerFactory umContainerFactory( @Qualifier("umConnectionFactory") ConnectionFactory umConnectionFactory) { Фабрика SimpleRabbitListenerContainerFactory = новый SimpleRabbitListenerContainerFactory (); Factory.setConnectionFactory(umConnectionFactory); фабрика.setConcurrentConsumers(3); Factory.setMaxConcurrentConsumers(6); Factory.setDefaultRequeueRejected(ложь); RabbitTemplate RabbitTemplate = новый RabbitTemplate (umConnectionFactory); RabbitTemplate.setChannelTransacted(истина); RabbitTemplate.setReplyTimeout(60000); возврат на завод; } Мне нужно было 2 инстанса, так как нам нужно подключиться к 2 виртуальным хостам для разных инстансов. и ниже приведен код того, что происходит, когда мы получаем сообщение

@RabbitListener(admin = "amqpAssetMgmtAdmin", очереди = "${asstMgmt.queue.name}", ContainerFactory = "AssetContainerFactory") public void loadAssetMgmtData (Сообщение сообщения, канал канала) выдает IOException { длинный тег = 0; пытаться { УДДАО дао = новый УДДАО(); dao.setAssetMgmtRabbitTemplate(assetMgmtRabbitTemplate); Заголовки Map = msg.getMessageProperties().getHeaders(); String msgType = (String) headers.get("type"); Полезная нагрузка строки = новая строка (msg.getBody()); тег = msg.getMessageProperties().getDeliveryTag(); if(msgType == null || msgType.isEmpty()){ log.error("Получено сообщение с пустым типом сообщения, сообщение отклонено"); канал.basicReject(тег, ложь); } //Обрабатываем сообщение канал.basicAck(тег, ложь); } catch (JDBCConnectionException e) { log.error("Исключение БД, поэтому сообщение запрашивается"); log.error(e.getMessage()); если (тег>0) Channel.basicReject(тег, правда); }catch (Исключение е) { if(msg.getMessageProperties().getRedelivered()){ log.error("Произошла внутренняя ошибка сервера. Отклонение без повторной очереди ", e); если (тег>0) канал.basicReject(тег, ложь); }еще{ если (тег>0) Channel.basicReject(тег, правда); log.error("Произошла внутренняя ошибка сервера. Отклонение и повторная постановка в очередь", e); } } } Спасибо, что уделили время. Пожалуйста, помогите мне понять, где я ошибаюсь.
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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