From 38002aecc91421f58337d7141ea394de8c9c8359 Mon Sep 17 00:00:00 2001 From: heavyrain2012 Date: Fri, 19 Nov 2021 20:21:41 +0800 Subject: [PATCH] =?UTF-8?q?Http=E8=AF=B7=E6=B1=82=E5=A4=B1=E8=B4=A5?= =?UTF-8?q?=E6=97=B6=E6=89=93=E5=8D=B0=E8=AF=A6=E7=BB=86=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/wildfirechat/push/PushServer.java | 3 +- .../persistence/MemoryMessagesStore.java | 14 +++---- .../moquette/spi/impl/MessagesPublisher.java | 10 ++--- .../moquette/spi/impl/ProtocolProcessor.java | 2 +- .../main/java/win/liyufan/im/HttpUtils.java | 38 +++++++++++++++++-- .../src/main/java/win/liyufan/im/Utility.java | 4 +- 6 files changed, 51 insertions(+), 20 deletions(-) diff --git a/broker/src/main/java/cn/wildfirechat/push/PushServer.java b/broker/src/main/java/cn/wildfirechat/push/PushServer.java index a968f69c..b1099fc6 100644 --- a/broker/src/main/java/cn/wildfirechat/push/PushServer.java +++ b/broker/src/main/java/cn/wildfirechat/push/PushServer.java @@ -25,6 +25,7 @@ import java.util.concurrent.Executors; import static io.moquette.BrokerConstants.PUSH_ANDROID_SERVER_ADDRESS; import static io.moquette.BrokerConstants.PUSH_IOS_SERVER_ADDRESS; +import static win.liyufan.im.HttpUtils.HttpPostType.POST_TYPE_Push; public class PushServer { private static final Logger LOG = LoggerFactory.getLogger(PushServer.class); @@ -99,7 +100,7 @@ public class PushServer { url = iOSPushServerUrl; pushMessage.voipDeviceToken = session.getVoipDeviceToken(); } - HttpUtils.httpJsonPost(url, new Gson().toJson(pushMessage, pushMessage.getClass())); + HttpUtils.httpJsonPost(url, new Gson().toJson(pushMessage, pushMessage.getClass()), POST_TYPE_Push); } else { LOG.info("Not mobile platform {}", session.getPlatform()); } diff --git a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java index d27086a5..4bb694a6 100755 --- a/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java +++ b/broker/src/main/java/io/moquette/persistence/MemoryMessagesStore.java @@ -1062,7 +1062,7 @@ public class MemoryMessagesStore implements IMessagesStore { event.type = type; m_Server.getCallbackScheduler().execute(() -> { try { - HttpUtils.httpJsonPost(mGroupInfoUpdateCallback, new Gson().toJson(event)); + HttpUtils.httpJsonPost(mGroupInfoUpdateCallback, new Gson().toJson(event), HttpUtils.HttpPostType.POST_TYPE_Grout_Event_Callback); } catch (Exception e) { e.printStackTrace(); Utility.printExecption(LOG, e, EVENT_CALLBACK_Exception); @@ -1081,7 +1081,7 @@ public class MemoryMessagesStore implements IMessagesStore { event.value = value; m_Server.getCallbackScheduler().execute(() -> { try { - HttpUtils.httpJsonPost(mGroupMemberUpdateCallback, new Gson().toJson(event)); + HttpUtils.httpJsonPost(mGroupMemberUpdateCallback, new Gson().toJson(event), HttpUtils.HttpPostType.POST_TYPE_Grout_Member_Event_Callback); } catch (Exception e) { e.printStackTrace(); Utility.printExecption(LOG, e, EVENT_CALLBACK_Exception); @@ -1099,7 +1099,7 @@ public class MemoryMessagesStore implements IMessagesStore { event.value = value; m_Server.getCallbackScheduler().execute(() -> { try { - HttpUtils.httpJsonPost(mRelationUpdateCallback, new Gson().toJson(event)); + HttpUtils.httpJsonPost(mRelationUpdateCallback, new Gson().toJson(event), HttpUtils.HttpPostType.POST_TYPE_User_Relation_Event_Callback); } catch (Exception e) { e.printStackTrace(); Utility.printExecption(LOG, e, EVENT_CALLBACK_Exception); @@ -1112,7 +1112,7 @@ public class MemoryMessagesStore implements IMessagesStore { if (!StringUtil.isNullOrEmpty(mUserInfoUpdateCallback)) { m_Server.getCallbackScheduler().execute(() -> { try { - HttpUtils.httpJsonPost(mUserInfoUpdateCallback, new Gson().toJson(InputOutputUserInfo.fromPbUser(user))); + HttpUtils.httpJsonPost(mUserInfoUpdateCallback, new Gson().toJson(InputOutputUserInfo.fromPbUser(user)), HttpUtils.HttpPostType.POST_TYPE_User_Info_Event_Callback); } catch (Exception e) { e.printStackTrace(); Utility.printExecption(LOG, e, EVENT_CALLBACK_Exception); @@ -1129,7 +1129,7 @@ public class MemoryMessagesStore implements IMessagesStore { event.type = type; m_Server.getCallbackScheduler().execute(() -> { try { - HttpUtils.httpJsonPost(mChannelInfoUpdateCallback, new Gson().toJson(event)); + HttpUtils.httpJsonPost(mChannelInfoUpdateCallback, new Gson().toJson(event), HttpUtils.HttpPostType.POST_TYPE_Channel_Info_Event_Callback); } catch (Exception e) { e.printStackTrace(); Utility.printExecption(LOG, e, EVENT_CALLBACK_Exception); @@ -1145,7 +1145,7 @@ public class MemoryMessagesStore implements IMessagesStore { event.type = type; m_Server.getCallbackScheduler().execute(() -> { try { - HttpUtils.httpJsonPost(mChatroomInfoUpdateCallback, new Gson().toJson(event)); + HttpUtils.httpJsonPost(mChatroomInfoUpdateCallback, new Gson().toJson(event), HttpUtils.HttpPostType.POST_TYPE_Chatroom_Info_Event_Callback); } catch (Exception e) { e.printStackTrace(); Utility.printExecption(LOG, e, EVENT_CALLBACK_Exception); @@ -1163,7 +1163,7 @@ public class MemoryMessagesStore implements IMessagesStore { event.type = type; m_Server.getCallbackScheduler().execute(() -> { try { - HttpUtils.httpJsonPost(mChatroomMemberUpdateCallback, new Gson().toJson(event)); + HttpUtils.httpJsonPost(mChatroomMemberUpdateCallback, new Gson().toJson(event), HttpUtils.HttpPostType.POST_TYPE_Chatroom_Member_Event_Callback); } catch (Exception e) { e.printStackTrace(); Utility.printExecption(LOG, e, EVENT_CALLBACK_Exception); diff --git a/broker/src/main/java/io/moquette/spi/impl/MessagesPublisher.java b/broker/src/main/java/io/moquette/spi/impl/MessagesPublisher.java index d57d5ef8..5799a6db 100755 --- a/broker/src/main/java/io/moquette/spi/impl/MessagesPublisher.java +++ b/broker/src/main/java/io/moquette/spi/impl/MessagesPublisher.java @@ -179,7 +179,7 @@ public class MessagesPublisher { final WFCMessage.Message finalMsg = message; Server.getServer().getCallbackScheduler().execute(() -> { try { - HttpUtils.httpJsonPost(robot.getCallback(), new Gson().toJson(SendMessageData.fromProtoMessage(finalMsg), SendMessageData.class)); + HttpUtils.httpJsonPost(robot.getCallback(), new Gson().toJson(SendMessageData.fromProtoMessage(finalMsg), SendMessageData.class), HttpUtils.HttpPostType.POST_TYPE_Robot_Message_Callback); } catch (Exception e) { e.printStackTrace(); Utility.printExecption(LOG, e, EVENT_CALLBACK_Exception); @@ -598,7 +598,7 @@ public class MessagesPublisher { if (channelInfo != null && !StringUtil.isNullOrEmpty(channelInfo.getCallback())) { Server.getServer().getCallbackScheduler().execute(() -> { try { - HttpUtils.httpJsonPost(channelInfo.getCallback() + "/message", new Gson().toJson(SendMessageData.fromProtoMessage(message), SendMessageData.class)); + HttpUtils.httpJsonPost(channelInfo.getCallback() + "/message", new Gson().toJson(SendMessageData.fromProtoMessage(message), SendMessageData.class), HttpUtils.HttpPostType.POST_TYPE_Channel_Message_Callback); } catch (Exception e) { e.printStackTrace(); Utility.printExecption(LOG, e, EVENT_CALLBACK_Exception); @@ -645,7 +645,7 @@ public class MessagesPublisher { public void forwardMessage(final WFCMessage.Message message, String forwardUrl) { Server.getServer().getCallbackScheduler().execute(() -> { try { - HttpUtils.httpJsonPost(forwardUrl, new Gson().toJson(OutputMessageData.fromProtoMessage(message), OutputMessageData.class)); + HttpUtils.httpJsonPost(forwardUrl, new Gson().toJson(OutputMessageData.fromProtoMessage(message), OutputMessageData.class), HttpUtils.HttpPostType.POST_TYPE_Forward_Message_Callback); } catch (Exception e) { e.printStackTrace(); Utility.printExecption(LOG, e, EVENT_CALLBACK_Exception); @@ -669,7 +669,7 @@ public class MessagesPublisher { callback.onFailure(statusCode, errorMessage); }); } - }); + }, HttpUtils.HttpPostType.POST_TYPE_Forward_Message_Callback); } catch (Exception e) { e.printStackTrace(); Utility.printExecption(LOG, e, EVENT_CALLBACK_Exception); @@ -683,7 +683,7 @@ public class MessagesPublisher { Server.getServer().getCallbackScheduler().execute(() -> { try { - HttpUtils.httpJsonPost(channelInfo.getCallback() + "/subscribe", new Gson().toJson(new OutputNotifyChannelSubscribeStatus(user, channelInfo.getTargetId(), listen), OutputNotifyChannelSubscribeStatus.class)); + HttpUtils.httpJsonPost(channelInfo.getCallback() + "/subscribe", new Gson().toJson(new OutputNotifyChannelSubscribeStatus(user, channelInfo.getTargetId(), listen), OutputNotifyChannelSubscribeStatus.class), HttpUtils.HttpPostType.POST_TYPE_Channel_Subscriber_Event_Callback); } catch (Exception e) { e.printStackTrace(); Utility.printExecption(LOG, e, EVENT_CALLBACK_Exception); diff --git a/broker/src/main/java/io/moquette/spi/impl/ProtocolProcessor.java b/broker/src/main/java/io/moquette/spi/impl/ProtocolProcessor.java index 265466cd..66680b65 100755 --- a/broker/src/main/java/io/moquette/spi/impl/ProtocolProcessor.java +++ b/broker/src/main/java/io/moquette/spi/impl/ProtocolProcessor.java @@ -264,7 +264,7 @@ public class ProtocolProcessor { if (!StringUtil.isNullOrEmpty(mUserOnlineStatusCallback)) { mServer.getCallbackScheduler().execute(() -> { try { - HttpUtils.httpJsonPost(mUserOnlineStatusCallback, new Gson().toJson(new UserOnlineStatus(userId, clientId, platform, status, packageName))); + HttpUtils.httpJsonPost(mUserOnlineStatusCallback, new Gson().toJson(new UserOnlineStatus(userId, clientId, platform, status, packageName)), HttpUtils.HttpPostType.POST_TYPE_User_Online_Event_Callback); } catch (Exception e) { e.printStackTrace(); Utility.printExecption(LOG, e, EVENT_CALLBACK_Exception); diff --git a/broker/src/main/java/win/liyufan/im/HttpUtils.java b/broker/src/main/java/win/liyufan/im/HttpUtils.java index b5741e20..7a1b4dbe 100644 --- a/broker/src/main/java/win/liyufan/im/HttpUtils.java +++ b/broker/src/main/java/win/liyufan/im/HttpUtils.java @@ -8,6 +8,7 @@ package win.liyufan.im; +import cn.wildfirechat.common.ErrorCode; import io.netty.util.internal.StringUtil; import okhttp3.*; import org.apache.http.HttpResponse; @@ -35,11 +36,28 @@ public class HttpUtils { void onFailure(int statusCode, String errorMessage); } - public static void httpJsonPost(final String url, final String jsonStr) { - httpJsonPost(url, jsonStr, null); + public enum HttpPostType { + POST_TYPE_Push, + POST_TYPE_Grout_Event_Callback, + POST_TYPE_Grout_Member_Event_Callback, + POST_TYPE_User_Relation_Event_Callback, + POST_TYPE_User_Info_Event_Callback, + POST_TYPE_Channel_Info_Event_Callback, + POST_TYPE_Channel_Subscriber_Event_Callback, + POST_TYPE_Chatroom_Info_Event_Callback, + POST_TYPE_Chatroom_Member_Event_Callback, + POST_TYPE_Robot_Message_Callback, + POST_TYPE_Channel_Message_Callback, + POST_TYPE_Forward_Message_Callback, + POST_TYPE_User_Online_Event_Callback, + POST_TYPE_Server_Exception_Callback; } - public static void httpJsonPost(final String url, final String jsonStr, final HttpCallback httpCallback) { + public static void httpJsonPost(String url, String jsonStr, HttpPostType postType) { + httpJsonPost(url, jsonStr, null, postType); + } + + public static void httpJsonPost(String url, String jsonStr, HttpCallback httpCallback, HttpPostType postType) { //消息推送内容为 {"sender":"uCGUxUaa","senderName":"杨","convType":0,"target":"usq7v7UU","targetName":"鞋子","userId":"usq7v7UU","line":0,"cntType":400,"serverTime":1610590766485,"pushMessageType":1,"pushType":2,"pushContent":"","pushData":"","unReceivedMsg":1,"mentionedType":0,"packageName":"cn.wildfirechat.chat","deviceToken":"AFoieP9P6u6CccIkRK23gRwUJWKqSkdiqnb-6gC1kL7Wv-9XNoEYBPU7VsINU_q8_WTKfafe35qWu7ya7Z-NmgOTX9XVW3A3zd6ilh--quj6ccINXRvVnh8QmI9QQ","isHiddenDetail":false,"language":"zh"} //推送信息只打印前100个字符,防止敏感信息打印到日志中去。 LOG.info("POST to {} with data {}...", url, jsonStr.substring(0, Math.min(jsonStr.length(), 100))); @@ -56,7 +74,20 @@ public class HttpUtils { client.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { + String logText; + if(postType == HttpPostType.POST_TYPE_Push) { + logText = "Http请求到推送服务失败,请检查推送服务是否正在运行或者配置文件中推送服务地址是否正确。"; + } else if(postType == HttpPostType.POST_TYPE_Robot_Message_Callback) { + logText = "Http请求转发消息到机器人服务失败,请检查机器人服务是否部署且在机器人信息中的回调地址是否正确。\n如果不需要机器人及机器人服务,请关掉应用服务中自动添加机器人好友和发送机器人欢迎语的代码,用户不给机器人发送消息就不会有转发请求了。"; + } else if(postType == HttpPostType.POST_TYPE_Channel_Message_Callback || + postType == HttpPostType.POST_TYPE_Channel_Subscriber_Event_Callback) { + logText = "Http请求到频道服务失败,请检查频道服务是否部署且在频道信息中的回调地址是否正确。"; + } else { + logText = "Http请求回调地址失败,请检查IM服务配置文件中对应的回调地址是否正确"; + } + System.out.println(logText); e.printStackTrace(); + LOG.info(logText); LOG.info("POST to {} with data {} failure", url, jsonStr); if(httpCallback != null) { httpCallback.onFailure(-1, e.getMessage()); @@ -88,5 +119,4 @@ public class HttpUtils { } }); } - } diff --git a/broker/src/main/java/win/liyufan/im/Utility.java b/broker/src/main/java/win/liyufan/im/Utility.java index 39c1ad90..908e62fb 100644 --- a/broker/src/main/java/win/liyufan/im/Utility.java +++ b/broker/src/main/java/win/liyufan/im/Utility.java @@ -99,7 +99,7 @@ public class Utility { for (Map.Entry entry : exceptionEventHashMap.entrySet()) { if(entry.getValue().count > 0) { String jsonStr = new Gson().toJson(entry.getValue()); - Server.getServer().getCallbackScheduler().execute(() -> HttpUtils.httpJsonPost(gMonitorEventAddress, jsonStr)); + Server.getServer().getCallbackScheduler().execute(() -> HttpUtils.httpJsonPost(gMonitorEventAddress, jsonStr, HttpUtils.HttpPostType.POST_TYPE_Server_Exception_Callback)); entry.getValue().count = 0; lastSendTime = now; } @@ -112,7 +112,7 @@ public class Utility { event.call_stack = "别担心!这个是心跳消息,已经有24小时没有出现异常消息了!"; event.count = IMExceptionEvent.EventType.HEART_BEAT; String jsonStr = new Gson().toJson(event); - Server.getServer().getCallbackScheduler().execute(() -> HttpUtils.httpJsonPost(gMonitorEventAddress, jsonStr)); + Server.getServer().getCallbackScheduler().execute(() -> HttpUtils.httpJsonPost(gMonitorEventAddress, jsonStr, HttpUtils.HttpPostType.POST_TYPE_Server_Exception_Callback)); } } }