Cloud foundry CloudFoundry中实例间的通信

Cloud foundry CloudFoundry中实例间的通信,cloud-foundry,hazelcast,Cloud Foundry,Hazelcast,是否有可能在部署到CloudFoundry的应用程序的多个实例之间进行通信? 我查看了CloudFoundry API,但找不到任何关于此主题的内容。 我已经尝试过Hazelcast,但不幸的是,我的Cloud Foundry提供商不支持多播,因此我必须知道每个其他实例的IP地址才能连接 我想我不可能是唯一对此感兴趣的人 我建议您使用消息传递服务(如RabbitMQ)在应用程序实例之间进行通信。您还可以将共享信息存储在数据库服务或文件系统之外的任何远程位置 在云中构建需要此类通信的应用程序通常不

是否有可能在部署到CloudFoundry的应用程序的多个实例之间进行通信? 我查看了CloudFoundry API,但找不到任何关于此主题的内容。 我已经尝试过Hazelcast,但不幸的是,我的Cloud Foundry提供商不支持多播,因此我必须知道每个其他实例的IP地址才能连接


我想我不可能是唯一对此感兴趣的人

我建议您使用消息传递服务(如RabbitMQ)在应用程序实例之间进行通信。您还可以将共享信息存储在数据库服务或文件系统之外的任何远程位置


在云中构建需要此类通信的应用程序通常不是一个好的做法。理想情况下,每个实例都应该能够独立运行且无状态。

如果可以通过编程方式访问ip地址,则可以构建Hazelcast配置对象并使用该对象设置集群。然后,您可以依靠tcp ip发现

伪代码:

List<String> ipAddresses = cloudfoundry.getIps()
Config config = new Config();
config.getJoinConfig().getIpDiscovery().addMembers(ipAddresses)
HazelcastInstance hz = Hazelcast.newHazelcastInstance(config);
List ipaddress=cloudfoundry.getIps()
Config=new Config();
config.getJoinConfig().getIpDiscovery().addMembers(IPAddresss)
HazelcastInstance hz=Hazelcast.newHazelcastInstance(配置);

您甚至可以加载现有的Hazelcast XML配置,并使用XmlConfigBuilder动态增强它。

谢谢@pveentjer。这是我的计划,但在CloudFoundry中,每个实例在启动时都会获得一个任意/不确定的IP地址。因此,其他实例不知道IP地址。这就是我依赖多播的原因——不幸的是,我的应用程序云提供商没有激活/阻止多播。顺便说一下,我想使用Vert.x作为通信的事件总线。它本机支持Hazelcast,并且非常容易安装。大多数CF运营商,特别是运行不受信任应用的公共运营商,将禁用容器到容器的直接通信。虽然直接的容器间通信可能会让你做一些有趣的事情,但如果一个坏人可以在同一个CF安装上运行一个应用程序,那么他们也会让你做一些有趣的事情。谢谢@ram vennam。我同意你的观点,这类应用程序应该使用不同的体系结构,或者不部署到云。在我的例子中,每个实例都有一个
调度器
(Node.js中的schedule module或JavaEE中的注释)。为了验证概念,调度器每分钟只向数据库写入一次值。但是对于2..n个实例,我不希望每分钟有2..n个条目,因此我正在寻找一些东西来同步实例,以便所有实例中只有一个写入数据库-可能由于负载或可用性,每分钟都有一个不同的实例。我看到RabbitMQ是Cloud Foundry中可用的服务,所以我将尝试一下。非常感谢你的想法。我想我会尝试实现RabbitMQ的“工作队列”模式。我在CF中使用了类似的Redis PUB/SUB场景。所有应用程序实例都注册到特定的Redis频道,并通过该频道广播消息。如果您的分布式问题需要某种类型的同步,它可能会变得更加复杂。