ОРУ. Как маршрутизировать сообщения в службе приема?

Switchyard - новая вещь для меня, и я совершенно заблудился, где искать. Что у меня есть две службы, связанные ESB. От отправителя я отправляю простой класс с данными. Основываясь на типе класса, я хочу, чтобы сторона получателя решила, что делать. Таким образом, типом класса будет действие, и данные в этом классе будут использоваться в качестве значений для этого действия.

Например, если я хочу создать нового клиента, я отправляю на автобус что-то вроде этого:

class CreateCustomerMessage{
  public String fName;
  public String lName;
  public Int age;
}

получатель получает сообщение, видит, что он должен создать клиента, и направляет это сообщение

class CustomerOperationsBean{
  public Long createCustomer(CreateCustomerMessage message){...}
}

И создает этот клиент. Может кто-нибудь показать мне, как это сделать?

1 ответ

Решение

Итак, вот что я нашел. Если у вас есть CamelService (я использую конфигурацию маршрутизации Java), вы можете сопоставить класс входящего сообщения, используя конструкцию, подобную этой:

public void configure() {
 from("switchyard://QueueConsumerService")
        .choice()
                .when(body(InventoryRequest.class))
                    .log("Received Inventory message : ${body}")
                    .to("some_endpoint")
                .when(body(AuditRequest.class))
                    .log("Audit request : ${body}");
                    .to("some_other_endpoint")
}

и это все. Здесь some_endpoint и some_other_endpoint могут быть любой конечной точкой, классом Java или другим маршрутизатором Camel. гл хф.

Другие вопросы по тегам