提交 fd960c0e 编写于 作者: chenzhehao's avatar chenzhehao

微信事件推送增加熔断机制

上级 ad2d92ec
package com.pica.cloud.wechat.yunqueyilian.server.client; package com.pica.cloud.wechat.yunqueyilian.server.client;
import com.pica.cloud.wechat.yunqueyilian.server.client.impl.UserServiceFailFactory;
import org.springframework.cloud.netflix.feign.FeignClient; import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestMethod;
...@@ -13,7 +14,7 @@ import java.util.Map; ...@@ -13,7 +14,7 @@ import java.util.Map;
* @Description: * @Description:
* @date: 2018/8/9 13:15 * @date: 2018/8/9 13:15
*/ */
@FeignClient("10102-PICA-CLOUD-WECHAT") @FeignClient(value = "10102-PICA-CLOUD-WECHAT", fallbackFactory = UserServiceFailFactory.class)
@RequestMapping("/wechats") @RequestMapping("/wechats")
public interface IUserServiceClient { public interface IUserServiceClient {
@RequestMapping(method = RequestMethod.GET, value = "/users") @RequestMapping(method = RequestMethod.GET, value = "/users")
......
package com.pica.cloud.wechat.yunqueyilian.server.client.impl;
import com.pica.cloud.foundation.entity.PicaResultCode;
import com.pica.cloud.wechat.yunqueyilian.server.client.IUserServiceClient;
import feign.hystrix.FallbackFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
/**
* @author: zhehao.chen
* @version: V1.0
* @Description:
* @date: 2018/8/10 10:57
*/
@Component
public class UserServiceFailFactory implements FallbackFactory<IUserServiceClient> {
public static final Logger logger = LoggerFactory.getLogger(UserServiceFailFactory.class);
@Override
public IUserServiceClient create(Throwable cause) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("code", PicaResultCode.INTERFACE_INVOKE_ERROR.code());
map.put("message", PicaResultCode.INTERFACE_INVOKE_ERROR.message());
return new IUserServiceClient() {
@Override
public Map users(String wechatName, String openId) {
logger.error("触发熔断机制 IUserServiceClient fallback", cause);
return map;
}
};
}
}
package com.pica.cloud.wechat.yunqueyilian.server.service.impl; package com.pica.cloud.wechat.yunqueyilian.server.service.impl;
import com.pica.cloud.foundation.entity.PicaException;
import com.pica.cloud.foundation.entity.PicaResultCode;
import com.pica.cloud.foundation.utils.utils.StringUtil; import com.pica.cloud.foundation.utils.utils.StringUtil;
import com.pica.cloud.wechat.yunqueyilian.common.CommonUtils; import com.pica.cloud.wechat.yunqueyilian.common.CommonUtils;
import com.pica.cloud.wechat.yunqueyilian.common.Constants; import com.pica.cloud.wechat.yunqueyilian.common.Constants;
...@@ -79,6 +81,9 @@ public class CoreServiceImpl implements CoreService { ...@@ -79,6 +81,9 @@ public class CoreServiceImpl implements CoreService {
mapIn.put("openId", openId); mapIn.put("openId", openId);
PWechatUser userGet = wechatUserMapper.queryByOpenId(mapIn);//从wechat表中获取数据 PWechatUser userGet = wechatUserMapper.queryByOpenId(mapIn);//从wechat表中获取数据
Map map = userServiceClient.users(Constants.WECHAT_NAME_YQYL, openId); //调用微信的接口,获取微信用户的详细信息 Map map = userServiceClient.users(Constants.WECHAT_NAME_YQYL, openId); //调用微信的接口,获取微信用户的详细信息
if (!PicaResultCode.SUCCESS.code().equals((String) map.get("code"))) {
throw new PicaException((String) map.get("code"), (String) map.get("message"));
}
logger.info("调用微信接口获取用户信息:" + map.toString()); logger.info("调用微信接口获取用户信息:" + map.toString());
//1.首先处理p_wechat_user表,存在信息就补全,不存在就新增 //1.首先处理p_wechat_user表,存在信息就补全,不存在就新增
insertOrUpdataWechatUser(requestMap, (HashMap) map.get("data"), userGet); insertOrUpdataWechatUser(requestMap, (HashMap) map.get("data"), userGet);
...@@ -135,12 +140,10 @@ public class CoreServiceImpl implements CoreService { ...@@ -135,12 +140,10 @@ public class CoreServiceImpl implements CoreService {
wechatUser.setSubscribe((Integer) map.get("subscribe")); wechatUser.setSubscribe((Integer) map.get("subscribe"));
wechatUser.setLanguage((String) map.get("language")); wechatUser.setLanguage((String) map.get("language"));
Integer subscribe_time = (Integer) map.get("subscribe_time"); Integer subscribe_time = (Integer) map.get("subscribe_time");
logger.info(subscribe_time.toString()); wechatUser.setSubscribeTime(StringUtil.isNull(subscribe_time) ? new Date() : new Date((long) subscribe_time * 1000));
wechatUser.setSubscribeTime(StringUtil.isNull(subscribe_time) ? new Date() : new Date(subscribe_time));
wechatUser.setRemark((String) map.get("remark")); wechatUser.setRemark((String) map.get("remark"));
wechatUser.setGroupid(String.valueOf(map.get("groupid"))); wechatUser.setGroupid(String.valueOf(map.get("groupid")));
List tagid_list = (ArrayList) map.get("tagid_list"); List tagid_list = (ArrayList) map.get("tagid_list");
logger.info(StringUtil.isNull(tagid_list) ? "" : tagid_list.toString());
wechatUser.setTagidList(StringUtil.isNull(tagid_list) ? "" : tagid_list.toString()); wechatUser.setTagidList(StringUtil.isNull(tagid_list) ? "" : tagid_list.toString());
wechatUser.setDeleteFlag(1); wechatUser.setDeleteFlag(1);
wechatUser.setCreatId(0); wechatUser.setCreatId(0);
...@@ -152,7 +155,8 @@ public class CoreServiceImpl implements CoreService { ...@@ -152,7 +155,8 @@ public class CoreServiceImpl implements CoreService {
} }
} else if (eventType.equals(Constants.EVENT_TYPE_UNSUBSCRIBE)) {//取消关注 } else if (eventType.equals(Constants.EVENT_TYPE_UNSUBSCRIBE)) {//取消关注
if (StringUtil.isNull(wechatUser)) {//新增 if (StringUtil.isNull(wechatUser)) {//新增
logger.error("取消关注未能从数据库中获取到用户信息异常");
return;
} }
wechatUser.setSubscribe(0); wechatUser.setSubscribe(0);
wechatUserMapper.updateSubscribeById(wechatUser); wechatUserMapper.updateSubscribeById(wechatUser);
......
...@@ -115,9 +115,7 @@ ...@@ -115,9 +115,7 @@
<if test="modifyId != null"> <if test="modifyId != null">
modify_id = #{modifyId,jdbcType=INTEGER}, modify_id = #{modifyId,jdbcType=INTEGER},
</if> </if>
<if test="modifyTime != null"> modify_time = SYSDATE()
modify_time = #{modifyTime,jdbcType=TIMESTAMP},
</if>
</set> </set>
where id = #{id,jdbcType=INTEGER} where id = #{id,jdbcType=INTEGER}
</update> </update>
...@@ -129,6 +127,6 @@ ...@@ -129,6 +127,6 @@
</select> </select>
<update id="updateSubscribeById" parameterType="com.pica.cloud.wechat.yunqueyilian.server.entity.PWechatUser"> <update id="updateSubscribeById" parameterType="com.pica.cloud.wechat.yunqueyilian.server.entity.PWechatUser">
update p_wechat_user set subscribe = #{subscribe} where id = #{id,jdbcType=INTEGER} update p_wechat_user set subscribe = #{subscribe},modify_time = SYSDATE() where id = #{id,jdbcType=INTEGER}
</update> </update>
</mapper> </mapper>
\ No newline at end of file
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册