Vertx和Camel集成

w6lpcovy  于 2023-11-18  发布在  Apache
关注(0)|答案(3)|浏览(148)

我试图找出从Apache Camel路由向外部Vert.x事件总线发送消息的最佳方式。
我看过camel-vertx库和vertx-camel-bridge,但这些库似乎用于在同一JVM中运行的Camel和Vert.x之间进行通信,我没有看到任何Camel和Vert.x单独运行的示例。
我的假设是正确的吗?ActiveMQ会是Vertx和Camel之间的一个很好的桥梁吗?

gdx19jrr

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();

iovurdzv

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 路线没有收到任何消息

q3qa4bjr

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();
        }
    }
}

字符串

相关问题