我正在群集设置中使用infinispan 8.1.0 Final和Wildfly 10。
每台服务器都已开始运行
C:\wildfly-10\bin\standalone.bat --server-config=standalone-ha.xml -b 10.09.139.215 -u 230.0.0.4 -Djboss.node.name=MyNode
我想在分布式模式下使用Infinispan,以便拥有分布式缓存。但是对于强制性要求,我需要构建一个JGroups通道,以便从文件中动态读取一些属性。
我需要使用此通道来构建基于TYPE和NAME的群集组(例如Type1-MyCluster)。每个想要加入群集的服务器都必须使用相关的频道。
在网上航行我发现了一些类似下面的代码:
public class JGroupsChannelServiceActivator implements ServiceActivator {
@Override
public void activate(ServiceActivatorContext context) {
stackName = "udp";
try {
channelServiceName = ChannelService.getServiceName(CHANNEL_NAME);
createChannel(context.getServiceTarget());
} catch (IllegalStateException e) {
log.log(Level.INFO, "channel seems to already exist, skipping creation and binding.");
}
}
void createChannel(ServiceTarget target) {
InjectedValue<ChannelFactory> channelFactory = new InjectedValue<>();
ServiceName serviceName = ChannelFactoryService.getServiceName(stackName);
ChannelService channelService = new ChannelService(CHANNEL_NAME, channelFactory);
target.addService(channelServiceName, channelService)
.addDependency(serviceName, ChannelFactory.class, channelFactory).install();
}
我创建了META-INF / services / .... JGroupsChannelServiceActivator文件。
当我将战争部署到服务器时,操作失败并显示以下错误:
"{\"WFLYCTL0180: Services with missing/unavailable dependencies\" => [\"jboss.jgroups.channel.clusterWatchdog is missing [jboss.jgroups.stack.udp]\"]}"
我做错了什么? 如何以我需要的方式构建频道? 我以什么方式告诉infinispan使用该通道进行分布式缓存?
答案 0 :(得分:1)
您找到的提案取决于实现,可能会在升级过程中导致很多问题。我不推荐它。
让我检查一下我是否正确理解了您的问题 - 您需要能够手动创建JGroups通道,因为您使用了一些自定义属性。
如果是这种情况 - 您可以按建议here获取JGroups频道。但是后来你获得了一个已经连接的JChannel
实例(所以这对你的情况来说可能为时已晚)。
不幸的是,由于Wildfly管理JChannel
(它是集群会话,EJB等所必需的),因此完全控制JChannel
创建过程的唯一方法是使用Infinispan嵌入式(库)模式。这需要在WAR依赖项中添加infinispan-embedded
。之后,您可以类似地to this test初始化它。