实战Netty集群 - 分布式聊天实战-同步通道

Ignite是什么?

架构模式

灵活的分布式架构解决方案

ignite 信息订阅(基于主题的消息)

Unordered Messages

listen方法帮助收听/订阅消息。当调用这些方法时,具有指定消息主题的侦听器在所有(或子组)节点上注册,以侦听新消息。通过侦听方法,传递的谓词返

Subscribe for Messages

listen方法帮助收听/订阅消息。当调用这些方法时,具有指定消息主题的侦听器在所有(或子组)节点上注册,以侦听新消息。通过侦听方法,传递的谓词返

IgniteMessaging

通过IgniteMessaging接口提供了分布式消息传递功能。你可以得到一个IgniteMessaging的实例,就像这样:

IgniteMessaging rmtMsg = ignite.message(ignite.cluster().forRemotes());

IgniteCache

IgniteCache接口是Ignite缓存实现的一个入口,提供了基于JCache规范的基本方法,包括获取数据、执行查询;此外,还有JCache规范之外的功能,比如数据加载、查询、异步模型。

获取IgniteCache的实例:

 Ignite ignite = Ignition.ignite();
 IgniteCache<Integer,String> cache = ignite.cache("helloCache");

Ignite如何解决通道在不同节点同步的问题?

 分布式MAP存储群组用户信息

 IgniteCache<String, String> groupUsers = IgniteGroups.getInstance().getGroupCache(groupId);

发送群组消息,群组订阅主题 group_topc

public void sendToGroup(String groupId, String userId, PacketC packet) {
        if (StringUtils.isEmpty(gniteConfig.getZk())) {
            return;
        }
        IgniteMessaging rmtMsg = igniteUtil.getMsg();
        MessageBean messageBean = new MessageBean();
        messageBean.setPacket(packet);
        messageBean.setUserId(userId);
        messageBean.setGroupId(groupId);
        rmtMsg.send(group_topc, messageBean);
        log.info("ignite sendToGroup:  {} ", messageBean);
    }

群组接收消息,群组消息订阅主题group_topc

if (StringUtils.isEmpty(gniteConfig.getZk())) {
            return;
        }
        IgniteMessaging rmtMsg = igniteUtil.getMsg();
        rmtMsg.remoteListen(group_topc, (nodeId, msg1) -> {
            if (msg1 instanceof MessageBean) {
                MessageBean m = (MessageBean) msg1;
                String groupId = m.getGroupId();
                IgniteCache<String, String> groupUsers = IgniteGroups.getInstance().getGroupCache(groupId);
                Iterator<Entry<String, String>> iterator = groupUsers.iterator();
                iterator.forEachRemaining((key) -> {
                    LocalSession local = Users.getInstance().getByUserId(key.getKey());
                    if (null != local) {
                        log.info("receviceGroup : {}", local);
                        Users.getInstance().send(local.getChannel(), m.getPacket());
                    }
                });
            }
            return true;
        });

 gitee imScoket: Netty通讯

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值