Поддержка прокси-сервера Camel в Camel 3

У меня есть случай использования, когда bean-компонент Spring определяется так:

<bean id="myBean" class="my.java.IntfImpl"/>

Класс my.java.IntfImpl, реализующий my.java.Intf, необходимо заменить на реализацию на основе Camel. Для Camel 2.x я мог бы сделать это:

<proxy id="camelProxy"
            serviceInterface="my.java.Intf"
            serviceUrl="direct:start"/>

А потом переплетаю свой bean так:

<bean id="myBean" parent="camelProxy"/>

Проблема в том, что Camel 3.x не поддерживает CamelProxy. Итак, как мне добиться того же с Camel 3.x?


person sanjbh    schedule 19.05.2021    source источник


Ответы (1)


Мне удалось решить эту проблему с помощью org.apache.camel.ProducerTemplate. В классе реализации my.java.IntfImplCamel я внедряю экземпляр ProducerTemplate с помощью аннотации Produce. Этот экземпляр используется для отправки полезной нагрузки с заголовками на маршрут Camel.

public class IntfImplCamel implements my.java.Intf {
  @Produce("direct:startRoute)
  private ProducerTemplate producerTemplate;
  
  @Override
  public String methodImpl() {
       Object retVal = doStuff();
       producerTemplate.sendBodyAndHeader(producerTemplate.getDefaultEndpoint(), retVal, "MyHeader", 
            "MyHeaderValue");
  }
}

Я подключаю экземпляр my.java.IntfImplCamel к myBean следующим образом:

<bean id="myBean" class="my.java.IntfImplCamel"/>

Это позволяет мне позволить потребителям myBean беспрепятственно использовать маршрут Camel вместо реализации Java без внесения изменений в код потребителя.

person sanjbh    schedule 31.05.2021