首页 文章

以编程方式开发集群中Infinispan的Jgroup通道

提问于
浏览
0

我正在集群设置中使用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文件 .

当我将war部署到服务器时,操作失败并显示以下错误:

"{\"WFLYCTL0180: Services with missing/unavailable dependencies\" => [\"jboss.jgroups.channel.clusterWatchdog is missing [jboss.jgroups.stack.udp]\"]}"

我究竟做错了什么?如何以我需要的方式构建 Channels ?我以什么方式告诉infinispan使用该通道进行分布式缓存?

1 回答

  • 1

    您找到的提案取决于实现,可能会在升级过程中导致很多问题 . 我不推荐它 .

    让我检查一下我是否正确理解了您的问题 - 您需要能够手动创建JGroups通道,因为您使用了一些自定义属性 .

    如果是这种情况 - 您可以按照建议here获取JGroups通道 . 但是后来你获得了一个已经连接的 JChannel 实例(所以这对你的情况来说可能为时已晚) .

    不幸的是,由于Wildfly管理 JChannel (它是集群会话,EJB等所必需的),完全控制 JChannel 创建过程的唯一方法是使用Infinispan嵌入式(库)模式 . 这需要将 infinispan-embedded 添加到WAR依赖项中 . 之后,您可以类似地初始化它to this test .

相关问题