用户在登录时在sso系统中进行判断,如果是新用户,在注册完成后,需要调用dubbo中的环信服务进行注册环信用户
dubbo-huanxin服务在注册环信用户时,需要随机生成密码,携带token请求环信的REST API进行用户注册。
注册成功后,需要将环信的用户信息保存到MySQL中。
用户在APP端使用即时通讯功能时,需要通过环信用户信息登录到环信平台,由于数据存储到服务端,所以需要通过dubbo-huanxin进行查询
在拿到环信账号信息后,登录环信,登录成功后即可与环信平台进行交互。
需要注意的是,APP端与环信平台交互,是不走后端系统的,是直连操作
重试机制
@EnableRetry注解来激活重试功能
导入依赖
· dependency> <groupId>org.springframework.retry</groupId> <artifactId>spring-retry</artifactId></dependency><dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId></dependency>
参数说明
· value:抛出指定异常才会重试
· maxAttempts:最大重试次数,默认3次
· backoff:重试等待策略,默认使用@Backoff
• @Backoff 的value默认为1000L,我们设置为2000L;
• multiplier(指定延迟倍数)默认为0,表示固定暂停1秒后进行重试,如果把multiplier设置为2,则第一次重试为2秒,第二次为4秒,第三次为6秒
· Recover标注的方法,是在所有的重试都失败的情况下,最后执行该方法
• 方法的第一个参数必须是 Throwable 类型,最好与 @Retryable 中的 value一致
• 方法的返回值必须与@Retryable的方法返回值一致,否则该方法不能被执行
添加联系人
实现
· 将好友写入到MongoDB中
· 将好友关系注册到环信
流程
·
联系人列表
根据用户id查询全部Users列表
环信一管理员身份发送消息
@param targetUserName 发送目标的用户名 @param huanXinMessageType 消息类型 @param msg 消息体
String targetUrl = this.huanXinConfig.getUrl() + this.huanXinConfig.getOrgName() + "http://www.likecs.com/" + this.huanXinConfig.getAppName() + "/messages"; /*{"target_type": "users","target": ["user2","user3"],"msg": {"type": "txt","msg": "testmessage"},"from": "user1"}*/ String body = JSONUtil.createObj() .set("target_type", "users") .set("target", JSONUtil.createArray().set(targetUserName)) .set("msg", JSONUtil.createObj() .set("type", huanXinMessageType.getType()) .set("msg", msg)).toString(); //表示消息发送者;无此字段Server会默认设置为“from”:“admin”,有from字段但值为空串(“”)时请求失败// .set("from", "") return this.requestService.execute(targetUrl, body, Method.POST).isOk();
易错
要查询的id数据库有多条数据