2016-07-13 13 views
1

In dem camel documentation wird erwähnt, dass wir das ProducerTemplate mithilfe der @Produce-Annotation wie unten gezeigt injizieren können.Apache Camel: Kann ich @Produce verwenden, ohne den Endpoint uri in der Annotation anzugeben?

@Produce(uri = "activemq:foo") 
    private ProducerTemplate producer; 

Ich frage mich, ob es möglich ist, nicht die uri in der Anmerkung zu spezifizieren und die uri an den Hersteller in seinen sendBody Verfahren, wie unten passieren, so dass ich dies in einer Util Klasse verwenden kann, um zu produzieren irgendein Endpunkt?

public class JmsProducerUtils { 
    @Produce 
    private ProducerTemplate producer; 

    public void publishMessageToEndpoint(String endpoint, String message) { 

     producer.sendBody(endpoint, message); 
    } 
} 

Gibt es Bedenken, sich dessen bewusst zu sein, wenn Sie es so benutzen?

+0

Zugabe als Kommentar, da sie indirekt Ihre Frage beantwortet. Sie könnten das Dienstprogramm CamelContextAware erstellen und dann den CamelContext verwenden, um einen Producer zu erhalten. Rufen Sie dann das sendBody wie in Ihrem Beispiel auf. –

Antwort

0

Nun, keine Sorge, es sollte auf jeden Fall funktionieren - Sie können einen einfachen Komponententest schreiben, um es zu verifizieren - aber wenn Ihre URIs nicht dynamisch in Runtime gebildet werden, würde ich vorschlagen, die in ihrer Dokumentation erwähnte Vorgehensweise zu verwenden. eine Schnittstelle:

@InOnly 
public class JmsProducer { 
    void publish(String message); 
} 

und es dann in Ihrer Klasse injiziert etwa so:

public class Foo { 
    @Produce(uri = "activemq:foo") 
    private JmsProducer fooProducer; 

    @Produce(uri = "activemq:bar") 
    private JmsProducer barProducer; 
}