Как я упоминал ранее, у вас уже есть неправильная конфигурация в 'myInput', так как у вас нет конфигурации @Input
, которая приводит к ошибке A component required a bean named 'myInput' that could not be found.
при запуске клиента.Таким образом, что-то подобное потребуется на стороне потребителя
interface MyProcessor {
String INPUT = "myInput";
@Input("myInput")
MessageChannel myInput();
}
Более того, если вы не определите group
, это приведет к анонимной очереди на стороне Кролика (что-то вроде myInput.anonymous.pZg03h0zQ2-SHLh1_QL8DQ
)что по существу приводит к новому имени очереди при каждом запуске, поэтому
spring.cloud.stream.bindings.myInput.destination=myInput
spring.cloud.stream.bindings.myInput.group=myGroup
приводит к имени очереди myInput.myGroup
, которое является постоянным и непротиворечивым между запусками.
Кроме того, насторона производителя myOutput
приводит к созданию Rabbit Exchange, который не имеет маршрутизации в вышеупомянутую (или любую другую) очередь, поэтому Rabbit отбрасывает сообщения, поэтому вы не можете получать сообщения, отправленные от производителя, пока вы не создадите маршрутмежду обменом myOutput
и очередью myInput.myGroup
.Однако, если вы сконфигурируете вход, как я описал выше, spring-cloud-stream также создаст обмен с именем myInput
, который будет автоматически перенаправлен на myInput.myGroup
, поэтому, если вы измените своего производителя для отправки в этот пункт назначения, вы получитесообщения на потребителя.