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

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

上级 ad2d92ec
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.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
......@@ -13,7 +14,7 @@ import java.util.Map;
* @Description:
* @date: 2018/8/9 13:15
*/
@FeignClient("10102-PICA-CLOUD-WECHAT")
@FeignClient(value = "10102-PICA-CLOUD-WECHAT", fallbackFactory = UserServiceFailFactory.class)
@RequestMapping("/wechats")
public interface IUserServiceClient {
@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;
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.wechat.yunqueyilian.common.CommonUtils;
import com.pica.cloud.wechat.yunqueyilian.common.Constants;
......@@ -79,6 +81,9 @@ public class CoreServiceImpl implements CoreService {
mapIn.put("openId", openId);
PWechatUser userGet = wechatUserMapper.queryByOpenId(mapIn);//从wechat表中获取数据
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());
//1.首先处理p_wechat_user表,存在信息就补全,不存在就新增
insertOrUpdataWechatUser(requestMap, (HashMap) map.get("data"), userGet);
......@@ -135,12 +140,10 @@ public class CoreServiceImpl implements CoreService {
wechatUser.setSubscribe((Integer) map.get("subscribe"));
wechatUser.setLanguage((String) map.get("language"));
Integer subscribe_time = (Integer) map.get("subscribe_time");
logger.info(subscribe_time.toString());
wechatUser.setSubscribeTime(StringUtil.isNull(subscribe_time) ? new Date() : new Date(subscribe_time));
wechatUser.setSubscribeTime(StringUtil.isNull(subscribe_time) ? new Date() : new Date((long) subscribe_time * 1000));
wechatUser.setRemark((String) map.get("remark"));
wechatUser.setGroupid(String.valueOf(map.get("groupid")));
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.setDeleteFlag(1);
wechatUser.setCreatId(0);
......@@ -152,7 +155,8 @@ public class CoreServiceImpl implements CoreService {
}
} else if (eventType.equals(Constants.EVENT_TYPE_UNSUBSCRIBE)) {//取消关注
if (StringUtil.isNull(wechatUser)) {//新增
logger.error("取消关注未能从数据库中获取到用户信息异常");
return;
}
wechatUser.setSubscribe(0);
wechatUserMapper.updateSubscribeById(wechatUser);
......
......@@ -115,9 +115,7 @@
<if test="modifyId != null">
modify_id = #{modifyId,jdbcType=INTEGER},
</if>
<if test="modifyTime != null">
modify_time = #{modifyTime,jdbcType=TIMESTAMP},
</if>
modify_time = SYSDATE()
</set>
where id = #{id,jdbcType=INTEGER}
</update>
......@@ -129,6 +127,6 @@
</select>
<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>
</mapper>
\ No newline at end of file
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册