diff --git a/src/main/java/io/github/ehlxr/utils/SendAlarmUtil.java b/src/main/java/io/github/ehlxr/utils/SendAlarmUtil.java new file mode 100644 index 0000000..8d7b8f2 --- /dev/null +++ b/src/main/java/io/github/ehlxr/utils/SendAlarmUtil.java @@ -0,0 +1,89 @@ +/* + * The MIT License (MIT) + * + * Copyright © 2020 xrv + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package io.github.ehlxr.utils; + +import com.google.common.collect.ImmutableMap; + +import java.util.Objects; +import java.util.concurrent.CompletableFuture; +import java.util.function.BiConsumer; + +/** + * 预警信息发送工具类 + * + * @author ehlxr + * @since 2020-12-23 17:47. + */ +public class SendAlarmUtil { + private static String dingtalkUrl; + + public static void init(String dingtalkUrl) { + Objects.requireNonNull(dingtalkUrl, "dingtalkUrl not allow null"); + + SendAlarmUtil.dingtalkUrl = dingtalkUrl; + } + + /** + * 异步发送预警信息 + * + * @param msg 预警信息 + * @param action {@link BiConsumer} 完成后回调函数式接口 + */ + public static void send(String msg, BiConsumer action) { + // String msg = String.format("%s\ntraceid: %s", msg, MDC.get(Constants.LOG_TRACE_ID)); + + CompletableFuture.supplyAsync(() -> { + Objects.requireNonNull(dingtalkUrl, "SendAlarmUtil not init."); + return HttpUtil.post(dingtalkUrl, + JsonUtils.obj2String(ImmutableMap.of("msgtype", "text", + "text", ImmutableMap.of("content", msg)))); + } + + ).whenCompleteAsync(action); + } + + /** + * 异步发送预警信息 + * + * @param message 预警信息 + */ + public static void send(String message) { + send(message, (u, t) -> { + }); + } + + public static void main(String[] args) throws InterruptedException { + Try.of(() -> SendAlarmUtil.init(dingtalkUrl)) + .trap(System.out::println) + .run(); + + send("dsfsdf", + (t, u) -> System.out.println("send exception message to dingtalk result " + t + ". " + u)); + + System.out.println("000000"); + + Thread.sleep(2000); + } +}