我试图找出从Apache Camel路由向外部Vert.x事件总线发送消息的最佳方式。我看过camel-vertx库和vertx-camel-bridge,但这些库似乎用于在同一JVM中运行的Camel和Vert.x之间进行通信,我没有看到任何Camel和Vert.x单独运行的示例。我的假设是正确的吗?ActiveMQ会是Vertx和Camel之间的一个很好的桥梁吗?
gdx19jrr1#
Vert.x事件总线可以集群化。在一个节点(A)上,您可以让纯Vert.x应用程序发送消息。在另一个节点(B)上,您可以让Camel应用程序使用Vert.x Camel桥。在节点A上:
vertx.eventBus().send("eventbus-address", "a message");
字符串在节点B上:
CamelContext camel = new DefaultCamelContext(); OutboundMapping outbound = OutboundMapping .fromVertx("eventbus-address") .toCamel("stream:out"); CamelBridge.create(vertx, new CamelBridgeOptions(camel) .addOutboundMapping(outbound)).start();
型
iovurdzv2#
这里我的两个节点Camel 1:
@Override public void configure() { from("vertx:start.event") .log("Message received: ${body}") .setBody(constant("xxxx")); }
字符串Vertex 1:
public class Publisher extends AbstractVerticle { @Override public void start() { vertx.setPeriodic(1000, timerId -> { vertx.eventBus().request("start.event", UUID.randomUUID().toString(), event -> { if (event.succeeded()) { System.err.println(event.result().body()); } }); }); } }
型使用此mvn依赖项对vertx垂直进行群集化
<dependency> <groupId>io.vertx</groupId> <artifactId>vertx-infinispan</artifactId> <version>4.4.6</version> </dependency>
型我的 Camel 路线没有收到任何消息
q3qa4bjr3#
如果有人仍然有兴趣在这里 Camel 连接到ISPN:
public class CamelVertxRoute { public static void main(String[] args) throws Exception { CamelContext context = new DefaultCamelContext(); ClusterManager mgr = new InfinispanClusterManager(); VertxOptions options = new VertxOptions().setClusterManager(mgr); Future<Vertx> vertxFuture = Vertx.clusteredVertx(options); vertxFuture.onComplete(res -> { if (res.succeeded()) { Vertx vertx = res.result(); VertxComponent vertxComponent = new VertxComponent(); vertxComponent.setVertx(vertx); context.addComponent("vertx", vertxComponent); // Ugly but just for demo try { context.addRoutes(new RouteBuilder() { @Override public void configure() { from("vertx:start.event") .log("Message received: ${body}") .setBody(constant("Response from Camel :)")) ; } }); } catch (Exception e) { throw new RuntimeException(e); } } else { System.err.println("Err joining ISPN"); } }); // Define a simple Camel route // Start the Camel context context.start(); synchronized (CamelVertxRoute.class) { CamelVertxRoute.class.wait(); } } }
字符串
3条答案
按热度按时间gdx19jrr1#
Vert.x事件总线可以集群化。在一个节点(A)上,您可以让纯Vert.x应用程序发送消息。在另一个节点(B)上,您可以让Camel应用程序使用Vert.x Camel桥。
在节点A上:
字符串
在节点B上:
型
iovurdzv2#
这里我的两个节点
Camel 1:
字符串
Vertex 1:
型
使用此mvn依赖项对vertx垂直进行群集化
型
我的 Camel 路线没有收到任何消息
q3qa4bjr3#
如果有人仍然有兴趣在这里 Camel 连接到ISPN:
字符串