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通讯