架构
POJO 生产
登录后可跨设备保存划线和私人笔记登录
POJO 生产者
从 POJO 向任意 Camel 端点发送消息有两种不同的方式:
- 使用
@Produce或@EndpointInject - 通过接口封装
使用 @Produce
要允许从 POJO 发送消息,可以使用 @Produce 注解。它会注入一个 org.apache.camel.ProducerTemplate,从而使 bean 能够发送消息。
@Produce POJO 注解不属于任何 Camel 路由的一部分,因此不能对其使用 errorHandler 或 onException。 |
|---|
例如,向 ActiveMQ 上的 foo 队列发送一条消息:
public class Foo {
@Produce("activemq:foo")
ProducerTemplate producer;
public void doSomething() {
if (whatever) {
producer.sendBody("<hello>world!</hello>");
}
}
}这样做的缺点是你的代码现在依赖于 Camel 的 API ProducerTemplate。下一节介绍如何消除这种依赖。
关于如何在 bean 上使用属性作为端点配置,例如在 @Produce 或 @EndpointInject 上使用 property 属性,请参阅 POJO Consuming。 |
|---|
对你的代码隐藏 Camel API
你可以对应用代码隐藏 Camel API。你可以在一个注入点(字段或属性 setter)上添加 @Produce 注解,并使用你在业务逻辑中使用的某个接口。示例:
public interface MyListener {
// this method is request/reply (InOut) because the method has a return value
// to use one way (InOnly) then the method should be a void method
String sayHello(String name);
}
public class MyBean {
@Produce("activemq:foo")
protected MyListener producer;
public void doSomething() {
// lets send a message and get a response back
String response = producer.sayHello("James");
}
}在此处,Camel 会在 @Produce 注解处自动注入一个智能客户端代理——即 MyListener 接口的一个实例。
当我们调用该接口上的方法时,方法调用会被转换为一个对象并发送到端点;在本例中,就是发送到 ActiveMQ 端点的 foo 队列。由于 sayHello 方法具有返回类型(String),Camel 将使用请求-应答(InOut)消息模式。
如果方法是 void 方法,那么 Camel 将使用事件消息(InOnly)消息模式,如下所示:
public interface MyListener {
// this method is one-way (InOnly) because the method is void
void sayHello(String name);
}另请参阅
评论
登录后参与评论
正在加载评论…
KnowForge