Как отключить / остановить RabbitMQ очередь привязок потоков Spring Cloud - PullRequest
0 голосов
/ 23 апреля 2020

Я хочу, чтобы потребители в rabbitmq не создавали очередь из привязок весеннего облачного потока при достижении конечной точки / подготовки к отключению. Ниже приведена конфигурация:

Добавлена ​​зависимость в pom. xml

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>

Application.yml:

spring:
  cloud: 
    stream:
      bindings: 
        produceChannel: 
          binder: rabbit
          content-type: application/json
          destination: internal-exchange
        consumeChannel: 
          binder: rabbit
          content-type: application/json
          destination: internal-exchange
          group: small-queue
      rabbit:
        bindings:
          consumeChannel:
            consumer:
              autoBindDlq: true
              durableSubscription: true
              requeueRejected: false
              republishToDlq: true
              bindingRoutingKey: admin
          produceChannel: 
            producer:               
              routingKeyExpression: '"admin"'

sample. java

import org.springframework.cloud.stream.annotation.Input;
import org.springframework.messaging.SubscribableChannel;

public interface Sample{
    @Input("consumeChannel")
    SubscribableChannel consumeChannel();

    @Output("produceChannel")
    SubscribableChannel produceChannel();
}

Интеграция с RabbitMQ была достигнута с помощью абстракций Spring Cloud @StreamLinster и @EnableBinding, как показано ниже:

@EnableBinding(Sample.class)


@StreamListener("consumeChannel")
public void sampleMessage(String message) {
    // code
}

Ожидается программная остановка потребителя очереди RabbitMQ. Заранее спасибо

1 Ответ

0 голосов
/ 30 апреля 2020

Я проанализировал проблему, почему получаю пустые значения, вызывая конечную точку привода '/ привод / привязки'

При нажатии на конечную точку привязки привода он вызывает метод collectInputBindings () в BindingsEndpoint.class.

В BindingsEndpoint. java, выборка значений привязки из inputBindingLifecycle

(Collection<Binding<?>>) new DirectFieldAccessor(inputBindingLifecycle).getPropertyValue("inputBindings");

В следующих методах установка пустого списка привязок для inputBindings

В InputBindingLifecycle. java ,

void doStartWithBindable(Bindable bindable) {
    this.inputBindings = bindable.createAndBindInputs(bindingService);
}

В Bindable. java,

default Collection<Binding<Object>> createAndBindInputs(BindingService adapter) {
        return Collections.<Binding<Object>>emptyList();
    }

Просьба предложить мне исправить эти проблемы, если нужно изменить какую-либо зависимость или любую конфигурацию кода

...