ZeroMq + Jgroups 无中心化数据发布订阅

消息中间件ZeroMq实现数据交互

1.TCP协议实现远程节点的代理,IPC协议实现本地节点的代理

2.通过接口方式支持多语言访问,节点提供发布接口,代理端会间隔时间访问该接口的订阅数据:包括该节点的域、主题、以及主题发布的消息。

该节点只能发布自己节点的域和主题,以及主题消息。不能发布其他节点的数据。

代理端提供订阅接口,节点调用订阅接口,获取当前网络系统中的所用域、主题,选择进行订阅。

一个节点下可以同时进行发布和订阅,发布者和订阅者可能同时出现。

jgroups实现可靠的群组通讯

1.中心数据存储:整个代理点放入到一个组播列表中进行管理,每间隔5秒进行相互广播数据,相互复制共享中心数据。

2.创建和删除组,组成员加入和离开组,侦测并删除丢失的成员

基于代理模式的数据无中心订阅发布流程

1.代理端启动初始化,查看是否多网卡的情况下,根据配置选择中网卡。

2.查看是否在没有网络的情况下我们的机器并没有网络连接 (比如,DSL调制解调器宕机了),或者我们只想要在本机上进行多播。

3.连接到该网络系统中,进行连接。读取广播消息时候当前节点的唯一标识。

4.查看,是否有历史广播记录,如有则进行数据添加。

5.通过节点提供的发布接口,获取该节点的域、主题、以及主题发布的消息,间隔时间进行消息广播。

6.在整个运行期中, 有节点通过代理端进行发布和订阅主题,有节点加入和退出都有监听。

jgroups实现可靠的群组通讯代码

import org.jgroups.*;
import org.jgroups.conf.ProtocolConfiguration;
import org.jgroups.conf.XmlConfigurator;
import org.jgroups.stack.IpAddress;
import org.jgroups.util.Util;

import java.io.*;
import java.util.LinkedList;
import java.util.List;

public class SimpleChat1 extends ReceiverAdapter {
   
    JChannel channel;
    String userName = "ABC1";
    String ipAddress;
    private List<String> state = new LinkedList<String>();

    private void start() throws Exception {
   
        InputStream input = Thread.currentThread().getContextClassLoader().getResourceAsStream("udp.xml");
        XmlConfigurator conf = XmlConfigurator.getInstance(input);
        String UDP = conf.getProtocolStack().get(0).getProtocolString();
        UDP = UDP.replace("replace_bind_addr", "192.168.1.3");
        conf.getProtocolStack()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值