Skip to content

关于task层中的todo的想法 #54

Open

Description

@UsherFall

关于task中push.go里的todo

//@todo when arg.ServerId server is down, user could be reconnect other serverId but msg in queue no consume
task.pushSingleToConnect(arg.ServerId, arg.UserId, arg.Msg)

因为在task里已经维护了关于connect层的serverId信息,那是不是只要做一个if判断就可以实现,也就是说如果当前serverId在task层里查找不到(服务失效)的话,就遍历task维护的connect层信息找到另一个有效的connect服务

Activity

  1. LockGit commented on Apr 21, 2023

    @LockGit
    Owner

    由于目标serverId故障,当前用户触发重连,可能连接到了其他的serverId上,这个时候msg要去往的serverId是要改变的。
    应该弄一个获取当前userId此刻在那个serverId上的方法即可,这样投递出去的消息是可达的

  2. UsherFall commented on Apr 21, 2023

    @UsherFall
    Author

    由于目标serverId故障,当前用户触发重连,可能连接到了其他的serverId上,这个时候msg要去往的serverId是要改变的。 应该弄一个获取当前userId此刻在那个serverId上的方法即可,这样投递出去的消息是可达的

    那比我想象的复杂好多,,这等于需要让connect的服务保持可用性?我看起来userId和serverId还是对应的关系

  3. UsherFall commented on Apr 22, 2023

    @UsherFall
    Author

    由于目标serverId故障,当前用户触发重连,可能连接到了其他的serverId上,这个时候msg要去往的serverId是要改变的。 应该弄一个获取当前userId此刻在那个serverId上的方法即可,这样投递出去的消息是可达的

    再看了下发现昨天想错了!好像也没那么难,如果当前userId因为connect服务失效断开连接,然后再自主地去另一个connect服务身份认证的话,会把userId和serverId组成键值放到redis里。那这样的话在下面这个错误处理里再根据userId拿到serverId就可以了

    	connectRpc, err := RClient.GetRpcClientByServerId(serverId)
    	if err != nil {
    		logrus.Infof("get rpc client err %v", err)
    	}

    但又有点太简单,是差了啥东西吗

  4. LockGit commented on Apr 22, 2023

    @LockGit
    Owner

    由于目标serverId故障,当前用户触发重连,可能连接到了其他的serverId上,这个时候msg要去往的serverId是要改变的。 应该弄一个获取当前userId此刻在那个serverId上的方法即可,这样投递出去的消息是可达的

    再看了下发现昨天想错了!好像也没那么难,如果当前userId因为connect服务失效断开连接,然后再自主地去另一个connect服务身份认证的话,会把userId和serverId组成键值放到redis里。那这样的话在下面这个错误处理里再根据userId拿到serverId就可以了

    	connectRpc, err := RClient.GetRpcClientByServerId(serverId)
    	if err != nil {
    		logrus.Infof("get rpc client err %v", err)
    	}

    但又有点太简单,是差了啥东西吗

    不使用默认的arg.ServerId ===> 根据userId和serverId的映射关系取最新的应该是哪个serverId

  5. UsherFall commented on Apr 22, 2023

    @UsherFall
    Author

    看不太懂,我理解是redis用string类型存userId和serverId的对应关系,那只要用userId去查询拿到的应该就是userId对应的最新的serverId

  6. LockGit commented on Apr 22, 2023

    @LockGit
    Owner

    看不太懂,我理解是redis用string类型存userId和serverId的对应关系,那只要用userId去查询拿到的应该就是userId对应的最新的serverId

    是这个意思

  7. UsherFall commented on Apr 22, 2023

    @UsherFall
    Author

    看不太懂,我理解是redis用string类型存userId和serverId的对应关系,那只要用userId去查询拿到的应该就是userId对应的最新的serverId

    是这个意思
    那按我上面说的那样改就可以吗?发起rpc请求错误后从redis里拿个severId再请求一次

  8. LockGit commented on Apr 22, 2023

    @LockGit
    Owner

    可以,作为补偿机制吧

  9. UsherFall commented on Apr 22, 2023

    @UsherFall
    Author

    可以,作为补偿机制吧

    @LockGit 这个需要提个pr吗,要的话我测试下

  10. LockGit commented on Apr 24, 2023

    @LockGit
    Owner

    可以提

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions