Vertx: Как пересылать сообщения из одной вершины в другую с помощью параметров доставки?

Я отправляю сообщение одной вершине, которая, в свою очередь, может потребоваться переслать ее другим вершинам. Я не хочу писать избыточный код для копирования заголовков из сообщения, создания другого объекта сообщения и его передачи. Есть ли способ переслать сообщение в vert.x с сохранением параметров доставки?


person Ronak Vyas    schedule 24.08.2017    source источник


Ответы (2)


То, что вы хотите, не совсем возможно, но если вас интересуют только заголовки, это довольно просто переслать. Вы можете установить заголовки одним вызовом метода. Однако вы не можете переслать весь объект сообщения, передав его методу отправки.

Это работает для меня.

vertx.eventBus().send("forwardingAddress",
                    message.body(),new DeliveryOptions()
                        .setHeaders(message.headers()));
person Thim Anneessens    schedule 26.03.2018
comment
Это не работает, если вы не передадите адрес ответа в заголовках. - 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
comment
Спасибо за Ваш ответ. Я до сих пор не понимаю, как это поможет мне пересылать сообщения с неповрежденными заголовками. - person Ronak Vyas; 28.08.2017
comment
вы можете использовать message.headers() для извлечения заголовка из тела ответа и использовать его по своему усмотрению. - person Shasha; 28.08.2017
comment
Да, я могу это сделать. На самом деле я хочу переслать сообщение, не копируя все заголовки и другую метаинформацию в каждый момент пересылки, как я уже упоминал в вопросе. - person Ronak Vyas; 28.08.2017
comment
Таким образом, вы можете просто переслать объект сообщения. - person Shasha; 28.08.2017
comment
Могу ли я сделать это? Я пытался это сделать и потерпел неудачу. Мне пришлось скопировать заголовки и другую метаинформацию в DeliveryOptions. Он не отправляет заголовки, если я просто пересылаю его. - person Ronak Vyas; 28.08.2017
comment
У меня такая же проблема. @RonakVyas Вы смогли это решить? - person aravindaM; 27.09.2019