框架使用springcloud,消费者和提供者之间用feign调用。
消费者项目中搭建了socket.io,监听了多个事件。
在收到监听事件的消息时,通过消费者的feign去调用提供者的接口更新数据,同时把消息发给其他socket连接。
现在socket事件收到消息后去调用feign的方法(代码中的userApi等方法),老是超时,麻烦大佬帮忙看下是怎么回事,感激不尽!!!
@OnEvent("message") //连接成功
public void message(SocketIOClient client, String data) {
JSONObject json = JSONObject.parseObject(data);
String operation = json.getString("operation");
Map<String, String> param = new HashMap<>();
switch(operation) {
case "connected": //连接成功后要发送的消息
logger.info("connected事件触发,数据为:" + data);
client.set("userId", json.getString("userId")); //断开时需要用到的属性
client.set("name", json.getString("name"));
client.set("source", json.getString("source"));
client.set("role", json.getString("role"));
param.put("userId", json.getString("userId")); //发送消息或更新数据时用到的属性
param.put("name", json.getString("name"));
param.put("role", json.getString("role"));
param.put("isOnline", "在线");
for (SocketIOClient item : pcSocketSet) {
item.sendEvent("data", net.sf.json.JSONObject.fromObject(param).toString());
}
if(json.getString("source").equals("pc")) {
pcSocketSet.add(client);
}
if(json.getString("role").equals("2")) {
userApi.updateOnline(param);
}else if(json.getString("role").equals("3")) {
String carId = json.getString("carId");
param.put("carId", carId);
carApi.updateCarOnline(param);
}
break;
建议写单元测试单独调用下这个接口,看下是否会超时。从而确认是不是只在这种场景下会调用失败,其他场景是可以调用成功的,从而缩小问题排查范围。
初步判断,还是和注册中心注册的服务信息,网络情况有关。建议先重启下服务注册中心,然后再重启下服务的消费者和提供者在试试。