/ / Ako sa prihlásiť na odber konkrétneho smerovacieho kľúča pomocou RabbitMQ - jar, králik, mikroservisy, jar-amqp

Ako sa prihlásiť na odber konkrétneho smerovacieho kľúča pomocou služby RabbitMQ - jar, rabbitmq, microservices, spring-amqp

Navrhujeme architektúru Microervices, radi by sme použili RabbitMQ ako sprostredkovateľa správ.

Chceli sme, aby každá služba mala jeden konkrétny front, povedzme applicationQueue.

Taktiež sme definovali, že naše posolstvá budú dvojakého druhu:

Diania: Správy, ktoré sú smerované na každú službu. Ak sa služba zaujíma o nejakú konkrétnu udalosť, zachytí ju a vytvorí úloha od toho.

Úlohy: Správy reprezentujúce pracovné miesta vytvorené zo služby pre seba, mali by byť publikované iba do frontu služby samotnej

Snažíme sa o jeho implementáciu pomocou programu Spring AMQP.

Navrhli sme producenta správ, takže po danej http požiadavke by vytvoril úlohu pre samotnú službu:

RestController:

@PostMapping
public void saveProduct(@RequestBody Product product) {
messageProducer.message("subscriptions.product.create", product)
.fromHttpRequest(requestContext)
.send();
}

náš spôsob odoslania výrobcu správy:

public void send() {
template.convertAndSend(exchange, routingKey, payload, message -> {
if (requestContext != null) {
extractHttpRequestInfo(message);
message.getMessageProperties().getHeaders()
.put(MessageDictionary.TRANSACTION_ID, generateTransactionId());
} else if (originalMessage != null) {
extractMessageInfo(message);
}
return message;
});
}

Konfigurácia RabbitMQ:

@Bean
List<Binding> binding(Queue queue, TopicExchange exchange) {
return Arrays.asList(
BindingBuilder.bind(queue).to(exchange).with("*.*"),
BindingBuilder.bind(queue).to(exchange).with("${condohub.rabbitmq.queue.name}.#")
);
}

a potom sa prihláste inde (. \ t @Digest anotácia je vlastná anotácia):

@Digest("${condohub.rabbitmq.queue.name}.product.create")
public void createProduct(Product product) {
service.save(product);
}

Akákoľvek pomoc je vítaná.

odpovede:

1 pre odpoveď č. 1

Vaše viazania nedávajú zmysel, prvý bude zodpovedať všetkým kľúčom s formulárom foo.bar, baz.qux atď., takže druhá je irelevantná.

Pravdepodobne by ste mali použiť výmenu fanoutovpre podujatia a každá služba má 2 fronty, jednu na fanout pre podujatia a jednu na tému výmena za pracovné miesta (s úzkym záväzkom len pre vlastné pracovné miesta).