Программно разработайте канал Jgroup для Infinispan в кластере.

Я работаю с 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 использовать этот канал для распределенного кэширования?


person Alex    schedule 10.05.2016    source источник


Ответы (1)


Предложение, которое вы нашли, зависит от реализации и может вызвать много проблем во время обновления. Я бы не рекомендовал это.

Позвольте мне проверить, правильно ли я понимаю вашу проблему - вам нужно создать канал JGroups вручную, потому что вы используете для него некоторые пользовательские свойства.

Если это так, вы можете получить канал JGroups, как предложено здесь. Но затем вы получаете экземпляр JChannel, который уже подключен (так что это может быть слишком поздно для вашего случая).

К сожалению, поскольку Wildfly управляет JChannel (это необходимо для сеансов кластеризации, EJB и т. д.), единственный способ получить полный контроль над процессом создания JChannel — это использовать режим встроенной (библиотеки) Infinispan. Это потребует добавления infinispan-embedded в ваши зависимости WAR. После этого вы можете инициализировать его аналогичным образом этого теста.

person Sebastian Łaskawiec    schedule 13.05.2016