Apache Camel 3的Endpoint默认是单例的,这意味着它们在应用程序中只被创建一次,并且可以在多个路由中使用。
如果需要多个实例,则可以通过编程方式指定Endpoint是非单例的。以下是一个简单的例子,展示如何在Camel中创建一个非单例的Endpoint:
@Component
public class MyEndpointFactory implements EndpointFactory {
@Override
public Endpoint createEndpoint(String uri, String remaining, Map parameters) throws Exception {
MyEndpoint endpoint = new MyEndpoint(uri, this);
endpoint.setSingleton(false);
return endpoint;
}
@Override
public boolean isEnabled(String scheme) {
return "my".equals(scheme);
}
@Override
public boolean isSingleton() {
return false;
}
}
public class MyEndpoint extends DefaultEndpoint {
public MyEndpoint(String uri, Component component) {
super(uri, component);
}
@Override
public Producer createProducer() throws Exception {
return new MyProducer(this);
}
}
public class MyProducer extends DefaultProducer {
public MyProducer(Endpoint endpoint) {
super(endpoint);
}
@Override
public void process(Exchange exchange) throws Exception {
// do something
}
}
上面的例子中,我们使用 MyEndpointFactory 创建名为“my”的自定义Endpoint。在 createEndpoint() 方法中,我们实例化 MyEndpoint,并将其设置为非单例。在 MyEndpoint 类中,我们实现创建生产者的方法,该生产者将在每次处理 Exchange 时被调用。
通过使用这个例子,我们可以看到如何在 Camel 3 中创建一个非单例的Endpoint,以及如何使用它来发送和接收 Exchange。