Любое условие для передачи сообщения между «очередями» путем динамического изменения имени очереди в потоке @Input («суффикс» + «QueueA») и @ Input («суффикс» + «QueueA») - PullRequest
0 голосов
/ 26 мая 2019

Существуют ли какие-либо условия для отправки сообщения между двумя «очередями» путем динамического изменения имени очереди в cloud.stream @Input("suffix"+"SampleQueueA") и @Input("suffix"+"SampleQueueB")

Этот вариант использования с облачным потоком Sprig с использованием сервера сообщений RabbitMQ.Я попытался поместить сообщения в две разные очереди, динамически меняя имя очереди.

# Input bindings used for testing
spring:
rabbitmq:
host: 127.0.0.1
virtual-host: /defaultVH
username: guest
password: guest


cloud:
stream:
bindings: 
ClientSampleQueueA:
binder: rabbit-A
contentType: application/x-java-object
group: groupA
destination: ClientSampleQueueA

VendorSampleQueueA:
binder: rabbit-A
contentType: application/x-java-object
group: groupA
destination: VendorSampleQueueA

# cloud.stream.bindings.input1.destination: customerId-1
# spring.cloud.stream.bindings.input2.destination: customerId-2


binders:
rabbit-A:
defaultCandidate: false
inheritEnvironment: false
type: rabbit
environment:
spring:
rabbitmq:
host: 127.0.0.1
virtualHost: /vhA
username: guest
password: guest
port: 5672
connection-timeout: 10000

interface Sink {

String INPUT1 = "ClientSampleQueueA";
String INPUT2 = "VendorSampleQueueA";


@Input(INPUT1)
SubscribableChannel input1();


@Input(INPUT2)
SubscribableChannel input2();

}
@Bean(name = "sourceChannel")
public MessageChannel localChannel() {
return new DirectChannel();
}


@Autowired
@Qualifier("sourceChannel")
private MessageChannel localChannel;

Хотите динамически разрешить очередь с помощью параметра Object.

private void sendMessage(Object body, Object contentType) {
        localChannel.send(MessageBuilder.createMessage(body,
                new MessageHeaders(Collections.singletonMap(MessageHeaders.CONTENT_TYPE, contentType))));
    }

1 Ответ

0 голосов
/ 27 мая 2019

Но что подписано на localChannel.

Как я уже сказал в своем комментарии:

spring.cloud.stream.bindings.ClientSampleQueueA.destination=commonDest
spring.cloud.stream.bindings.ClientSampleQueueA.group=ClientSampleQueueA
spring.cloud.stream.rabbit.bindings.ClientSampleQueueA.bindingRoutingKey=ClientSampleQueueA
spring.cloud.stream.bindings.VendorSampleQueueA.destination=commonDest
spring.cloud.stream.rabbit.bindings.VendorSampleQueueA.bindingRoutingKey=VendorSampleQueueA
spring.cloud.stream.bindings.VendorSampleQueueA.group=ClientSampleQueueA

и

spring.cloud.stream.bindings.sourceChannel.destination=commonDest
spring.cloud.stream.rabbit.bindings.sourceChannel.routingKeyExpression=headers.routeTo

, а затем

private void sendMessage(Object body, Object contentType) {
    localChannel.send(MessageBuilder.withPayload(body)
          .setHeader(MessageHeaders.CONTENT_TYPE, contentType)
          .setHeader("routeTo", "VendorSampleQueueA")
          .build();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...