2017-02-14 4 views
3

Мы имеем следующий мул поток:Mule: Связывание интерфейса для разных компонентов, как избежать дублирования?

<flow name="mule-flow-1"> 
    <component> 
     <spring-object bean="springBean_1"/> 
     <binding interface="com.acme.EmailService" method="send"> 
      <vm:outbound-endpoint path="send-email" exchange-pattern="one-way"/> 
     </binding> 
    </component> 
</flow> 

но сейчас мы хотим ввести новый поток, с новой Spring бина, который использует тот же самый EmailService.send метод, поэтому, мы можем сделать это как:

<flow name="mule-flow-2"> 
    <component> 
     <spring-object bean="springBean_2"/> 
     <binding interface="com.acme.EmailService" method="send"> 
      <vm:outbound-endpoint path="send-email" exchange-pattern="one-way"/> 
     </binding> 
    </component> 
</flow> 

Как вы можете видеть, мы связали метод EmailService.send дважды в двух разных потоках и это чистое дублирование кода.

Можно ли связать метод EmailService.send где-то в другом месте и просто использовать ref в mule-flow-1 и mule-flow-2?

ответ

0

Возможно, вы можете использовать подпоток? Определите свой компонент, а затем используйте ref-ref в любом потоке, который вы хотите повторно использовать.

<sub-flow name="mule-flow-send"> 
<component> 
    <spring-object bean="springBean_1"/> 
    <binding interface="com.acme.EmailService" method="send"> 
     <vm:outbound-endpoint path="send-email" exchange-pattern="one-way"/> 
    </binding> 
</component> 
</sub-flow> 

, а затем повторное использование:

<flow name="mule-flow-1"> 
    <flow-ref name="mule-flow-send" doc:name="mule-flow-send"/> 
</flow> 
<flow name="mule-flow-2"> 
    <flow-ref name="mule-flow-send" doc:name="mule-flow-send"/> 
</flow> 
+0

Проблема заключается в том: Мы используем '' springBean_1' и springBean_2', личинка из них используют один и тот же метод '' send' из интерфейса EmailService', так ваше решение немного неверно. – user471011

Смежные вопросы