Я отправляю сообщение одной вершине, которая, в свою очередь, может потребоваться переслать ее другим вершинам. Я не хочу писать избыточный код для копирования заголовков из сообщения, создания другого объекта сообщения и его передачи. Есть ли способ переслать сообщение в vert.x с сохранением параметров доставки?
Vertx: Как пересылать сообщения из одной вершины в другую с помощью параметров доставки?
Ответы (2)
То, что вы хотите, не совсем возможно, но если вас интересуют только заголовки, это довольно просто переслать. Вы можете установить заголовки одним вызовом метода. Однако вы не можете переслать весь объект сообщения, передав его методу отправки.
Это работает для меня.
vertx.eventBus().send("forwardingAddress",
message.body(),new DeliveryOptions()
.setHeaders(message.headers()));
person
Thim Anneessens
schedule
26.03.2018
Это не работает, если вы не передадите адрес ответа в заголовках.
- person aravindaM; 29.09.2019
Используя DeliveryOptions, вы можете передавать сообщения между Verticles.
Рассмотрим следующий пример:
// MainVerticle будет получать данные, а мы будем отправлять их в MessagingVerticle
public class MainVerticle extends AbstractVerticle {
@Override
public void start(Future<Void> fut) {
//your logic goes here for message object to pass
MessageConsumer<Object> mc = vertx.eventBus().consumer("your_addressToServer").handler(message -> {
Object message = message.body();
final DeliveryOptions options = new DeliveryOptions().setCodecName("any_messaging_address_name");
vertx.eventBus().send("any_messaging_address_name", Object(message object to pass) , options);
});
}
}
// Отправляем эти сообщения в MessagingVerticle
public class MessagingVerticle extends AbstractVerticle {
@Override
public void start(Future<Void> fut) {
vertx.eventBus().<Object>consumer("any_messaging_address_name",
message -> {
Object messageCommand = message.body(); // received object from MainVerticle
});
fut.complete();
}
}
Я надеюсь, что это поможет вам :)
person
Shasha
schedule
24.08.2017
Спасибо за Ваш ответ. Я до сих пор не понимаю, как это поможет мне пересылать сообщения с неповрежденными заголовками.
- person Ronak Vyas; 28.08.2017
вы можете использовать
message.headers()
для извлечения заголовка из тела ответа и использовать его по своему усмотрению.
- person Shasha; 28.08.2017
Да, я могу это сделать. На самом деле я хочу переслать сообщение, не копируя все заголовки и другую метаинформацию в каждый момент пересылки, как я уже упоминал в вопросе.
- person Ronak Vyas; 28.08.2017
Таким образом, вы можете просто переслать объект сообщения.
- person Shasha; 28.08.2017
Могу ли я сделать это? Я пытался это сделать и потерпел неудачу. Мне пришлось скопировать заголовки и другую метаинформацию в DeliveryOptions. Он не отправляет заголовки, если я просто пересылаю его.
- person Ronak Vyas; 28.08.2017
У меня такая же проблема. @RonakVyas Вы смогли это решить?
- person aravindaM; 27.09.2019