Linyuzai / concept

封装了一些常用组件,走过路过不要错过哦
Apache License 2.0
416 stars 122 forks source link

如何基于路径给某些用户推送 #10

Closed dagaozi closed 1 year ago

dagaozi commented 1 year ago

大神,你好,基于路径推送使用PathMessage可以实现,针对用户推送使用UserMesage可以实现,如何实现根据路径给某些用户推送啊,类似于这样: concept.send(new PathMessage(msg,path,listUserId))。如果我使用我自己定义一个消息类PathUserMessage,不知道 setBroadcast(false);是true,还是false。能否提供一个默认实现。

public class PathUserMessage extends ObjectMessage { public PathUserMessage(Object payload, String path,String... userIds) { this(payload,path, Arrays.asList(userIds)); }

public PathUserMessage(Object payload,String path, Collection<String> userIds) {
    super(payload);
    setBroadcast(false);
    getHeaders().put(PathSelector.KEY, path);
    getHeaders().put(UserSelector.KEY, String.join(",", userIds));
}

}

Linyuzai commented 1 year ago

大神,你好,基于路径推送使用PathMessage可以实现,针对用户推送使用UserMesage可以实现,如何实现根据路径给某些用户推送啊,类似于这样: concept.send(new PathMessage(msg,path,listUserId))。如果我使用我自己定义一个消息类PathUserMessage,不知道 setBroadcast(false);是true,还是false。能否提供一个默认实现。

public class PathUserMessage extends ObjectMessage { public PathUserMessage(Object payload, String path,String... userIds) { this(payload,path, Arrays.asList(userIds)); }

public PathUserMessage(Object payload,String path, Collection<String> userIds) {
    super(payload);
    setBroadcast(false);
    getHeaders().put(PathSelector.KEY, path);
    getHeaders().put(UserSelector.KEY, String.join(",", userIds));
}

}

setBroadcast用于标记本地服务如果匹配到之后是否还要转发到其他的实例,如果用户可以多端登录就设置为true,如果不行就设置false

另外你需要自己实现一个ConnectionSelector来适配你的消息,可以继承AbstractConnectionSelector,然后处理连接筛选,参考PathSelectorPathSelector,加个Order把顺序放到前面

Linyuzai commented 1 year ago

大神,你好,基于路径推送使用PathMessage可以实现,针对用户推送使用UserMesage可以实现,如何实现根据路径给某些用户推送啊,类似于这样: concept.send(new PathMessage(msg,path,listUserId))。如果我使用我自己定义一个消息类PathUserMessage,不知道 setBroadcast(false);是true,还是false。能否提供一个默认实现。 public class PathUserMessage extends ObjectMessage { public PathUserMessage(Object payload, String path,String... userIds) { this(payload,path, Arrays.asList(userIds)); }

public PathUserMessage(Object payload,String path, Collection<String> userIds) {
    super(payload);
    setBroadcast(false);
    getHeaders().put(PathSelector.KEY, path);
    getHeaders().put(UserSelector.KEY, String.join(",", userIds));
}

}

setBroadcast用于标记本地服务如果匹配到之后是否还要转发到其他的实例,如果用户可以多端登录就设置为true,如果不行就设置false

另外你需要自己实现一个ConnectionSelector来适配你的消息,可以继承AbstractConnectionSelector,然后处理连接筛选,参考PathSelectorPathSelector,加个Order把顺序放到前面

参考PathSelectorUserSelector

Linyuzai commented 1 year ago

大神,你好,基于路径推送使用PathMessage可以实现,针对用户推送使用UserMesage可以实现,如何实现根据路径给某些用户推送啊,类似于这样: concept.send(new PathMessage(msg,path,listUserId))。如果我使用我自己定义一个消息类PathUserMessage,不知道 setBroadcast(false);是true,还是false。能否提供一个默认实现。

public class PathUserMessage extends ObjectMessage { public PathUserMessage(Object payload, String path,String... userIds) { this(payload,path, Arrays.asList(userIds)); }

public PathUserMessage(Object payload,String path, Collection<String> userIds) {
    super(payload);
    setBroadcast(false);
    getHeaders().put(PathSelector.KEY, path);
    getHeaders().put(UserSelector.KEY, String.join(",", userIds));
}

}

2.0.0版本已经默认支持,Wiki