在我当前的设置中,我使用Hazelcast群集管理器的默认多播选项。当我链接容器化Vertx模块的实例(通过Docker网络链接)时,我可以看到它们正在成功创建Hazelcast集群。但是,当我尝试从一个模块在事件总线上发布事件时,另一个模块不会对此做出反应。我不确定Hazelcast集群中的网络设置与事件总线的网络设置有何关联。
目前,我的每个Vert都有以下编程配置。x模块,每个模块部署在docker容器中。
ClusterManager clusterManager = new HazelcastClusterManager();
VertxOptions vertxOptions = new VertxOptions()
.setClustered(true)
.setClusterManager(clusterManager);
vertxOptions.setEventBusOptions(new EventBusOptions()
.setClustered(true)
.setClusterPublicHost("application"));
Vert. x Core手册指出,我可能必须为事件总线配置clusterPublicHost
和clusterPublicPort
,但我不确定这些与一般网络拓扑关系如何。
我发现这个解决方案非常适合我,下面是我的代码片段(重要的部分是options.setClusterHost()
public class Runner {
public static void run(Class clazz) {
VertxOptions options = new VertxOptions();
try {
// for docker binding
String local = InetAddress.getLocalHost().getHostAddress();
options.setClusterHost(local);
} catch (UnknownHostException e) { }
options.setClustered(true);
Vertx.clusteredVertx(options, res -> {
if (res.succeeded()) {
res.result().deployVerticle(clazz.getName());
} else {
res.cause().printStackTrace();
}
});
}
}
public class Publisher extends AbstractVerticle {
public static void main(String[] args) {
Runner.run(Publisher.class);
}
...
}
不需要定义其他任何东西。。。
集群管理器工作正常,集群中每个节点(机器/docker容器)上的集群管理器配置必须相同,或者根本不进行任何配置(使用集群管理器的默认配置)必须使每个节点上的事件总线配置保持一致,必须将每个节点上的群集主机设置为该节点本身的IP地址和任意端口号(除非尝试在同一节点上运行多个Vert.x实例,否则必须为每个Vert.x实例选择不同的端口号)例如,如果一个节点的IP地址是192.168.1.12,那么您将执行以下操作:
VertxOptions options = new VertxOptions()
.setClustered(true)
.setClusterHost("192.168.1.12") // node ip
.setClusterPort(17001) // any arbitrary port but make sure no other Vert.x instances using same port on the same node
.setClusterManager(clusterManager);
在IP地址为192.168.1.56的另一个节点上,您可以执行以下操作:
VertxOptions options = new VertxOptions()
.setClustered(true)
.setClusterHost("192.168.1.56") // other node ip
.setClusterPort(17001) // it is ok because this is a different node
.setClusterManager(clusterManager);
答案就在这里https://groups.google.com/d/msg/vertx/_2MzDDowMBM/nFoI_k6GAgAJ
我经常看到这个问题,很多人在留档(包括我自己)中忽略的是事件总线不使用集群管理器发送事件总线消息。例如,在使用Hazelcast作为群集管理器的示例中,您已经将Hazelcast群集启动并正确通信(因此您的群集管理器很好);但是,由于以下一个或多个原因,事件总线无法与其他html" target="_blank">docker实例通信:
你需要做的是:
事件总线仅使用群集管理器来管理其他Vertx实例的IP/端口信息以及消费者/生产者的注册。通信独立于群集管理器完成,这就是为什么您可以正确配置群集管理器并进行通信,但仍然没有事件总线通信。
如果两个容器都在同一台主机上运行,您可能不需要执行上述两个步骤,但一旦开始在不同的主机上运行它们,您肯定会这样做。
也可能发生的事情就是垂直。当没有指定哪个vert的IP时,x使用环回接口。x(不是hazelcast)应该通过eventbus进行通信。这里的问题是,您不知道通过哪个接口进行通信(环回、与IP的接口,甚至可能有多个与IP的接口)。
为了克服这个问题,我曾经写过一个方法https://github.com/swisspush/vertx-cluster-watchdog/blob/master/src/main/java/org/swisspush/vertx/cluster/ClusterWatchdogRunner.java#L101
Vert. x和kubernetes携手并进。如果我使用istio作为服务网格,Zipkin的请求跟踪是否能够跟踪通过事件总线完成的通信? 客户- istio是否能够跟踪通过eventbus完成的请求? 跟踪页面上说,头需要通过http或grpc进行传播,但eventbus通过tcp发送消息,这是否意味着istio将无法跟踪请求并显示可视化工具[瀑布图和所有服务的可视化] Vertx主页 Even
如果您要以编程方式创建您的 Vert.x 实例,通过将 Vert.x 实例配置获得集群的event bus; VertxOptions options = new VertxOptions(); Vertx.clusteredVertx(options, res -> { if (res.succeeded()) { Vertx vertx = res.result(); Ev
Event Bus并不仅仅存在于一个单一的Vert.x实例。通过网络上的不同集群实例Vert.x一起就可以形成一个单一的,分布式的,Event Bus。
我正在尝试将kubernetes go客户端与云一起使用。谷歌。com/go/container。我使用GoogleCloudGo容器包创建集群,然后我想使用go客户端在集群上部署。go客户端给出的集群外示例使用kube配置文件获取集群的凭据。但是由于我只是在我的应用程序中创建了这个集群,所以我没有那个配置文件。 如何使用“google.golang.org/genproto/googleapis
我有一个很快的问题——有人试过同时运行这两个版本吗。x2和垂直。集群中的x 3应用程序,通过EventBus进行通信? 理论上这应该是可能的,但有人做过吗?;) 干杯,米莎
在docker机器上运行的docker容器而不是k8s吊舱如何操作k8s群集。例如,如果我需要在容器内执行类似操作: kubectl得到豆荚 在我的dockerfile中,我安装了kubectl 当我运行时,结果如下: 因此,我在命令中将装入docker容器 结果如下: 这似乎是因为k8s配置文件中的 然后再次装载身份验证文件,它将成功运行。 现在,我可以调用命令,或者