【问题标题】:Multiple JChannels in one cluster一个集群中的多个 JChannel
【发布时间】:2016-05-20 09:36:25
【问题描述】:

我认为在同一个集群中很容易有多个 JChannel(具有不同的名称)。我必须进行以下设置:

@Singleton
public class ChannelOne extends ReceiverAdapter
{
    JChannel channel;

    public void start()
    {
        channel = new JChannel();

        channel.setReceiver(this);
        channel.connect("ChannelOne");
    }

    public void receive(Message msg)
    {
        DataObject data = (DataObject) msg.getObject();
        log.debug("JGroups: Message received event received: " + data.eventData);
    }

    public void send(DataObject data)
    {
        Message msg = new Message(null, null, data);
        log.debug("JGroups: send: " + data.eventData);
        channel.send(msg);
    }

    public void viewAccepted(View new_view)
    {
        log.debug("JGroups: View accepted: " + new_view);
    }

}

我的 JGroups 配置如下(它用于 openshift,我们不能使用 UDP!-How to open a JChannel (JGroups) using Openshift Wildfly 8 Cartridge

<config xmlns="urn:org:jgroups"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="urn:org:jgroups http://www.jgroups.org/schema/JGroups-3.3.xsd">
    <TCP
            external_addr="${env.OPENSHIFT_GEAR_DNS}"
            external_port="${env.OPENSHIFT_WILDFLY_CLUSTER_PROXY_PORT}"
            bind_port="${env.OPENSHIFT_WILDFLY_CLUSTER_PORT}"
            bind_addr="${env.OPENSHIFT_WILDFLY_IP}"
            defer_client_bind_addr="true"
            enable_diagnostics="false"/>

    <TCPPING timeout="3000"
             initial_hosts="${env.OPENSHIFT_WILDFLY_CLUSTER}"
             port_range="0"
             num_initial_members="1"/>
    <MERGE2/>
    <FD/>
    <VERIFY_SUSPECT/>
    <BARRIER/>
    <pbcast.NAKACK2
            use_mcast_xmit="false"/>
    <UNICAST3/>
    <pbcast.STABLE/>
    <pbcast.GMS/>
    <MFC/>
    <FRAG2/>
</config>

现在假设我们不仅有一个ChannelOne,还有一个ChannelTwo Singleton,其目标是通过事件的使用来分隔事件。

如果我这样做,我观察到消息并未全部正确接收。两个频道之间似乎混合在一起。我在日志中有大量关于消息已被丢弃的警告。

我对频道的这个概念有什么误解?

【问题讨论】:

    标签: java jakarta-ee wildfly jgroups


    【解决方案1】:

    通道是集群的端点。如果你有不同的应用使用不同的集群,你需要将集群分开,否则应用会收到彼此的消息。

    为此,请为不同的集群选择不同的端口(@98​​7654321@、bind_port)。

    【讨论】:

    • 这意味着如果我们只为集群保留一个端口,由云服务 (OpenShift) 提供,那么只有一个通道可能吗?
    • 我不知道 OpenShift 是如何工作的。如果他们只提供一个端口,那么您不能创建多个通道。但是,如果它们提供了一系列绑定地址,那么您可以绑定到不同的绑定地址但相同的端口。我建议问问 OpenShift 集群人员...
    【解决方案2】:

    这是我们在 OpenShift 上与 WF/EAP 一起使用的“ping”机制:

    应该易于配置和使用。

    注意:必须授权运行 pod 的服务帐户才能访问 Kubernetes 的 REST api。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-13
      • 2016-04-10
      相关资源
      最近更新 更多