From 7fe95726eeb9cb3c3b9a2c71701c41415f896b4b Mon Sep 17 00:00:00 2001 From: fangjian0423 Date: Sun, 24 Feb 2019 20:27:49 +0800 Subject: [PATCH 01/10] Sentinel Endpoint add appName --- .../sentinel/endpoint/SentinelEndpoint.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/endpoint/SentinelEndpoint.java b/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/endpoint/SentinelEndpoint.java index f42898bc..9562fdc0 100644 --- a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/endpoint/SentinelEndpoint.java +++ b/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/endpoint/SentinelEndpoint.java @@ -16,6 +16,13 @@ package org.springframework.cloud.alibaba.sentinel.endpoint; +import java.util.HashMap; +import java.util.Map; + +import org.springframework.boot.actuate.endpoint.annotation.Endpoint; +import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; +import org.springframework.cloud.alibaba.sentinel.SentinelProperties; + import com.alibaba.csp.sentinel.adapter.servlet.config.WebServletConfig; import com.alibaba.csp.sentinel.config.SentinelConfig; import com.alibaba.csp.sentinel.log.LogBase; @@ -25,12 +32,7 @@ import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager; import com.alibaba.csp.sentinel.slots.block.flow.param.ParamFlowRuleManager; import com.alibaba.csp.sentinel.slots.system.SystemRuleManager; import com.alibaba.csp.sentinel.transport.config.TransportConfig; -import org.springframework.boot.actuate.endpoint.annotation.Endpoint; -import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; -import org.springframework.cloud.alibaba.sentinel.SentinelProperties; - -import java.util.HashMap; -import java.util.Map; +import com.alibaba.csp.sentinel.util.AppNameUtil; /** * Endpoint for Sentinel, contains ans properties and rules @@ -50,6 +52,7 @@ public class SentinelEndpoint { final Map result = new HashMap<>(); if (sentinelProperties.isEnabled()) { + result.put("appName", AppNameUtil.getAppName()); result.put("logDir", LogBase.getLogBaseDir()); result.put("logUsePid", LogBase.isLogNameUsePid()); result.put("blockPage", WebServletConfig.getBlockPage()); From ac11a3a7525b78e5e88cdfe30a9ae168beb6784c Mon Sep 17 00:00:00 2001 From: fangjian0423 Date: Sun, 24 Feb 2019 20:28:20 +0800 Subject: [PATCH 02/10] refactor sms module --- .../src/main/asciidoc-zh/sms.adoc | 9 +-- spring-cloud-alibaba-examples/pom.xml | 1 + .../sms-example/pom.xml | 48 ++++----------- .../alibaba/cloud/example/SmsApplication.java | 2 - .../sms/base/DefaultAlicomMessagePuller.java | 59 ++++++++++--------- .../sms/base/TokenGetterForAlicom.java | 25 ++++---- .../alicloud/sms/endpoint/SmsEndpoint.java | 6 +- 7 files changed, 61 insertions(+), 89 deletions(-) diff --git a/spring-cloud-alibaba-docs/src/main/asciidoc-zh/sms.adoc b/spring-cloud-alibaba-docs/src/main/asciidoc-zh/sms.adoc index fed8a525..6997a255 100644 --- a/spring-cloud-alibaba-docs/src/main/asciidoc-zh/sms.adoc +++ b/spring-cloud-alibaba-docs/src/main/asciidoc-zh/sms.adoc @@ -10,17 +10,10 @@ Spring Cloud Alibaba 已经发布了 0.2.2.BUILD-SNAPSHOT 版本,需要首先 ---- - - org.springframework.cloud - spring-cloud-dependencies - Finchley.SR2 - pom - import - org.springframework.cloud spring-cloud-alibaba-dependencies - 0.2.2.BUILD-SNAPSHOT + 0.2.0.RELEASE pom import diff --git a/spring-cloud-alibaba-examples/pom.xml b/spring-cloud-alibaba-examples/pom.xml index 31e8ca5e..94d77858 100644 --- a/spring-cloud-alibaba-examples/pom.xml +++ b/spring-cloud-alibaba-examples/pom.xml @@ -37,6 +37,7 @@ rocketmq-example spring-cloud-bus-rocketmq-example schedulerx-example/schedulerx-simple-task-example + sms-example diff --git a/spring-cloud-alibaba-examples/sms-example/pom.xml b/spring-cloud-alibaba-examples/sms-example/pom.xml index f466cc66..d405a38d 100644 --- a/spring-cloud-alibaba-examples/sms-example/pom.xml +++ b/spring-cloud-alibaba-examples/sms-example/pom.xml @@ -3,47 +3,22 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - alibaba.com sms-example - 0.0.1-SNAPSHOT jar - - sms-example - Demo project for Spring Boot + Example demonstrating how to use alicloud sms - org.springframework.boot - spring-boot-starter-parent - 2.0.6.RELEASE - + spring-cloud-alibaba-examples + org.springframework.cloud + 0.2.2.BUILD-SNAPSHOT + ../pom.xml UTF-8 UTF-8 - 1.8 - Finchley.SR2 - 0.2.2.BUILD-SNAPSHOT - - - - org.springframework.cloud - spring-cloud-dependencies - ${spring-cloud.version} - pom - import - - - org.springframework.cloud - spring-cloud-alibaba-dependencies - ${spring-cloud-alibaba-alicloud.version} - pom - import - - - @@ -59,11 +34,6 @@ org.springframework.cloud spring-cloud-starter-alicloud-sms - - alibaba.com - env-extension - 0.2.2.BUILD-SNAPSHOT - @@ -72,6 +42,14 @@ org.springframework.boot spring-boot-maven-plugin + + org.apache.maven.plugins + maven-deploy-plugin + ${maven-deploy-plugin.version} + + true + + diff --git a/spring-cloud-alibaba-examples/sms-example/src/main/java/org/springframework/cloud/alibaba/cloud/example/SmsApplication.java b/spring-cloud-alibaba-examples/sms-example/src/main/java/org/springframework/cloud/alibaba/cloud/example/SmsApplication.java index 83f25a94..abbd8efb 100644 --- a/spring-cloud-alibaba-examples/sms-example/src/main/java/org/springframework/cloud/alibaba/cloud/example/SmsApplication.java +++ b/spring-cloud-alibaba-examples/sms-example/src/main/java/org/springframework/cloud/alibaba/cloud/example/SmsApplication.java @@ -15,7 +15,6 @@ */ package org.springframework.cloud.alibaba.cloud.example; -import org.springframework.alicloud.env.extension.ImportExtraConfig; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -23,7 +22,6 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; * */ @SpringBootApplication -@ImportExtraConfig(name = "/Users/toava/sms.properties") public class SmsApplication { public static void main(String[] args) throws Exception{ diff --git a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/DefaultAlicomMessagePuller.java b/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/DefaultAlicomMessagePuller.java index 50fe2ed6..b7bea267 100755 --- a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/DefaultAlicomMessagePuller.java +++ b/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/DefaultAlicomMessagePuller.java @@ -15,14 +15,6 @@ */ package org.springframework.cloud.alicloud.sms.base; -import com.aliyun.mns.client.CloudQueue; -import com.aliyun.mns.common.ClientException; -import com.aliyun.mns.common.ServiceException; -import com.aliyun.mns.model.Message; -import org.apache.commons.lang3.concurrent.BasicThreadFactory; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; @@ -33,12 +25,21 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledThreadPoolExecutor; +import org.apache.commons.lang3.concurrent.BasicThreadFactory; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import com.aliyun.mns.client.CloudQueue; +import com.aliyun.mns.common.ClientException; +import com.aliyun.mns.common.ServiceException; +import com.aliyun.mns.model.Message; + /** * 阿里通信官方消息默认拉取工具类 */ public class DefaultAlicomMessagePuller { - private Log logger = LogFactory.getLog(DefaultAlicomMessagePuller.class); + private Log log = LogFactory.getLog(DefaultAlicomMessagePuller.class); private String mnsAccountEndpoint = "https://1943695596114318.mns.cn-hangzhou.aliyuncs.com/";// 阿里通信消息的endpoint,固定。 private String endpointNameForPop = "cn-hangzhou"; @@ -103,7 +104,7 @@ public class DefaultAlicomMessagePuller { sPollingMap.put(queueName, false); lockObj.notifyAll(); if (debugLogOpen) { - logger.info("PullMessageTask_WakeUp:Everyone WakeUp and Work!"); + log.info("PullMessageTask_WakeUp:Everyone WakeUp and Work!"); } } } @@ -131,7 +132,7 @@ public class DefaultAlicomMessagePuller { if (p != null && p) { try { if (debugLogOpen) { - logger.info("PullMessageTask_sleep:" + log.info("PullMessageTask_sleep:" + Thread.currentThread().getName() + " Have a nice sleep!"); } @@ -140,7 +141,7 @@ public class DefaultAlicomMessagePuller { } catch (InterruptedException e) { if (debugLogOpen) { - logger.info("PullMessageTask_Interrupted!" + log.info("PullMessageTask_Interrupted!" + Thread.currentThread().getName() + " QueueName is " + queueName); } @@ -158,7 +159,7 @@ public class DefaultAlicomMessagePuller { if (debugLogOpen) { SimpleDateFormat format = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss"); - logger.info("PullMessageTask_popMessage:" + log.info("PullMessageTask_popMessage:" + Thread.currentThread().getName() + "-popDone at " + "," + format.format(new Date()) + " msgSize=" + (popMsg == null ? 0 : popMsg.getMessageId())); @@ -171,7 +172,7 @@ public class DefaultAlicomMessagePuller { else { if (setPolling(queueName)) { if (debugLogOpen) { - logger.info("PullMessageTask_setPolling:" + log.info("PullMessageTask_setPolling:" + Thread.currentThread().getName() + " Polling!"); } } @@ -180,7 +181,7 @@ public class DefaultAlicomMessagePuller { } do { if (debugLogOpen) { - logger.info("PullMessageTask_Keep_Polling" + log.info("PullMessageTask_Keep_Polling" + Thread.currentThread().getName() + "KEEP Polling!"); } @@ -189,7 +190,7 @@ public class DefaultAlicomMessagePuller { } catch (ClientException e) { if (debugLogOpen) { - logger.info( + log.info( "PullMessageTask_Pop_Message:ClientException Refresh accessKey" + e); } @@ -200,7 +201,7 @@ public class DefaultAlicomMessagePuller { } catch (ServiceException e) { if (debugLogOpen) { - logger.info( + log.info( "PullMessageTask_Pop_Message:ServiceException Refresh accessKey" + e); } @@ -211,7 +212,7 @@ public class DefaultAlicomMessagePuller { } catch (Exception e) { if (debugLogOpen) { - logger.info( + log.info( "PullMessageTask_Pop_Message:Exception Happened when polling popMessage: " + e); } @@ -224,7 +225,7 @@ public class DefaultAlicomMessagePuller { if (dealResult) { // remember to delete message when consume message successfully. if (debugLogOpen) { - logger.info("PullMessageTask_Deal_Message:" + log.info("PullMessageTask_Deal_Message:" + Thread.currentThread().getName() + "deleteMessage " + popMsg.getMessageId()); } @@ -232,19 +233,19 @@ public class DefaultAlicomMessagePuller { } } catch (ClientException e) { - logger.error("PullMessageTask_execute_error,messageType:" - + messageType + ",queueName:" + queueName, e); + log.error("PullMessageTask_execute_error,messageType:" + messageType + + ",queueName:" + queueName, e); break; } catch (ServiceException e) { if (e.getErrorCode().equals("AccessDenied")) { - logger.error("PullMessageTask_execute_error,messageType:" + log.error("PullMessageTask_execute_error,messageType:" + messageType + ",queueName:" + queueName + ",please check messageType and queueName", e); } else { - logger.error("PullMessageTask_execute_error,messageType:" + log.error("PullMessageTask_execute_error,messageType:" + messageType + ",queueName:" + queueName, e); } break; @@ -252,30 +253,30 @@ public class DefaultAlicomMessagePuller { } catch (com.aliyuncs.exceptions.ClientException e) { if (e.getErrCode().equals("InvalidAccessKeyId.NotFound")) { - logger.error("PullMessageTask_execute_error,messageType:" + log.error("PullMessageTask_execute_error,messageType:" + messageType + ",queueName:" + queueName + ",please check AccessKeyId", e); } if (e.getErrCode().equals("SignatureDoesNotMatch")) { - logger.error("PullMessageTask_execute_error,messageType:" + log.error("PullMessageTask_execute_error,messageType:" + messageType + ",queueName:" + queueName + ",please check AccessKeySecret", e); } else { - logger.error("PullMessageTask_execute_error,messageType:" + log.error("PullMessageTask_execute_error,messageType:" + messageType + ",queueName:" + queueName, e); } break; } catch (Exception e) { - logger.error("PullMessageTask_execute_error,messageType:" - + messageType + ",queueName:" + queueName, e); + log.error("PullMessageTask_execute_error,messageType:" + messageType + + ",queueName:" + queueName, e); try { Thread.sleep(sleepSecondWhenNoData); } catch (InterruptedException e1) { - logger.error("PullMessageTask_execute_error,messageType:" + log.error("PullMessageTask_execute_error,messageType:" + messageType + ",queueName:" + queueName, e); } } diff --git a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/TokenGetterForAlicom.java b/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/TokenGetterForAlicom.java index 270f9a56..ac6b41d0 100755 --- a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/TokenGetterForAlicom.java +++ b/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/TokenGetterForAlicom.java @@ -15,6 +15,15 @@ */ package org.springframework.cloud.alicloud.sms.base; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.TimeZone; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + import com.aliyun.mns.client.CloudAccount; import com.aliyun.mns.client.CloudQueue; import com.aliyun.mns.client.MNSClient; @@ -27,21 +36,13 @@ import com.aliyuncs.http.MethodType; import com.aliyuncs.http.ProtocolType; import com.aliyuncs.profile.DefaultProfile; import com.aliyuncs.profile.IClientProfile; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.TimeZone; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentMap; /** * 获取接收云通信消息的临时token * */ public class TokenGetterForAlicom { - private Log logger = LogFactory.getLog(TokenGetterForAlicom.class); + private Log log = LogFactory.getLog(TokenGetterForAlicom.class); private String accessKeyId; private String accessKeySecret; private String endpointNameForPop; @@ -100,7 +101,7 @@ public class TokenGetterForAlicom { return token; } else { - logger.error("getTokenFromRemote_error,messageType:" + messageType + ",code:" + log.error("getTokenFromRemote_error,messageType:" + messageType + ",code:" + response.getCode() + ",message:" + response.getMessage()); throw new ServerException(response.getCode(), response.getMessage()); } @@ -124,8 +125,8 @@ public class TokenGetterForAlicom { CloudAccount account = new CloudAccount(token.getTempAccessKeyId(), token.getTempAccessKeySecret(), mnsAccountEndpoint, token.getToken()); - // logger.warn("ak:"+token.getTempAccessKey()); - // logger.warn("token:"+token.getToken()); + // log.warn("ak:"+token.getTempAccessKey()); + // log.warn("token:"+token.getToken()); MNSClient client = account.getMNSClient(); CloudQueue queue = client.getQueueRef(queueName); token.setClient(client); diff --git a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/endpoint/SmsEndpoint.java b/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/endpoint/SmsEndpoint.java index d254e0eb..77d8e39b 100644 --- a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/endpoint/SmsEndpoint.java +++ b/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/endpoint/SmsEndpoint.java @@ -15,12 +15,12 @@ */ package org.springframework.cloud.alicloud.sms.endpoint; +import java.util.Map; + import org.springframework.boot.actuate.endpoint.annotation.Endpoint; import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; -import java.util.Map; - -@Endpoint(id = "sms-info") +@Endpoint(id = "sms") public class SmsEndpoint { @ReadOperation From 14d505b53d0d12c9a76d19cb4c37610f7615cf6a Mon Sep 17 00:00:00 2001 From: fangjian0423 Date: Sat, 2 Mar 2019 17:00:03 +0800 Subject: [PATCH 03/10] update sms docs & remove useless dependency --- .../src/main/asciidoc-zh/sms.adoc | 26 +- .../src/main/asciidoc/sms.adoc | 226 ++++++++++++++++++ spring-cloud-alicloud-sms/pom.xml | 7 - 3 files changed, 230 insertions(+), 29 deletions(-) create mode 100644 spring-cloud-alibaba-docs/src/main/asciidoc/sms.adoc diff --git a/spring-cloud-alibaba-docs/src/main/asciidoc-zh/sms.adoc b/spring-cloud-alibaba-docs/src/main/asciidoc-zh/sms.adoc index 6997a255..82e0ae02 100644 --- a/spring-cloud-alibaba-docs/src/main/asciidoc-zh/sms.adoc +++ b/spring-cloud-alibaba-docs/src/main/asciidoc-zh/sms.adoc @@ -48,7 +48,7 @@ access-key 和 secret-key 是阿里云账号的 AK/SK,需要首先注册阿里 ==== 引入 SMS API -Spring Cloud Alicloud SMS 中的 SMS API 基于阿里云官方 SMS SDK 提供,具备单个短信发送、多个短信批量发送、短信查询、短信消息(`短信回执消息` 和 `上行短信消息`) 类行操作API。 +Spring Cloud Alicloud SMS 中的 SMS API 基于阿里云官方 SMS SDK 提供,具备单个短信发送、多个短信批量发送、短信查询、短信消息(短信回执消息 和 上行短信消息) 类行操作API。 一个简单的使用 SMS API 发送短信的应用如下。 @@ -60,13 +60,7 @@ public class SmsApplication { @Autowired private ISmsService smsService; - /** - * 短信发送 Example - * @param code - * @return - */ @RequestMapping("/batch-sms-send.do") - public SendBatchSmsResponse batchsendCheckCode( @RequestParam(name = "code") String code) { @@ -92,7 +86,6 @@ public class SmsApplication { } public static void main(String[] args) throws URISyntaxException { - SpringApplication.run(SmsApplication.class, args); } @@ -112,15 +105,10 @@ Spring Cloud Alicloud SMS 封装的 API 接口为了降低学习的成本,尽 * 批量短信发送 -参考以下的 Example ,来快速开发一个具有批量短信发送的功能。在 Controller 中或者新建一个 Controler 新增如下代码: +参考以下的 Example ,来快速开发一个具有批量短信发送的功能。在 Controller 中或者新建一个 Controller 新增如下代码: [source,java] ---- -/** - * 批量短信发送 Example - * @param code - * @return - */ @RequestMapping("/batch-sms-send.do") public SendBatchSmsResponse batchsendCheckCode( @RequestParam(name = "code") String code) { @@ -158,16 +146,10 @@ NOTE: 这里设置请求的 MethodType 为 GET,和官网给出的例子还有 * 短信查询 -参考以下的 Example ,可以快速开发根据某个指定的号码查询短信历史发送状态。在 Controller 中或者新建一个 Controler 新增如下代码: +参考以下的 Example ,可以快速开发根据某个指定的号码查询短信历史发送状态。在 Controller 中或者新建一个 Controller 新增如下代码: [source,java] ---- -/** - * - * 短信查询 Example - * @param telephone - * @return - */ @RequestMapping("/query.do") public QuerySendDetailsResponse querySendDetailsResponse( @RequestParam(name = "tel") String telephone) { @@ -234,7 +216,7 @@ public class SmsReportMessageListener * 上行短信消息 -通过订阅SmsUp上行短信消息,可以获知终端用户回复短信的内容。这些工作也已经被 Spring Cloud AliCloud SMS 封装好了。你只需要完成以下两步即可。 +通过订阅 SmsUp 上行短信消息,可以获知终端用户回复短信的内容。这些工作也已经被 Spring Cloud AliCloud SMS 封装好了。你只需要完成以下两步即可。 1、 在 `application.properties` 配置文件中(也可以是 application.yaml)配置 SmsReport 的队列名称。 diff --git a/spring-cloud-alibaba-docs/src/main/asciidoc/sms.adoc b/spring-cloud-alibaba-docs/src/main/asciidoc/sms.adoc new file mode 100644 index 00000000..61852861 --- /dev/null +++ b/spring-cloud-alibaba-docs/src/main/asciidoc/sms.adoc @@ -0,0 +1,226 @@ +== Spring Cloud Alibaba Cloud SMS + +SMS(Short Message Service)is a messaging service that covers the globe, Alibaba SMS provides convenient, efficient, and intelligent communication capabilities that help businesses quickly contact their customers. + +Spring Cloud AliCloud SMS provide an easier-to-use API for quick access to Alibaba Cloud's SMS service based on Spring Cloud Alibaba SMS. + +=== 如何引入 Spring Cloud AliCloud SMS + +We’ve released Spring Cloud Alibaba version 0.2.0. You will need to add dependency management POM first. + +[source,xml] +---- + + + + org.springframework.cloud + spring-cloud-alibaba-dependencies + 0.2.0.RELEASE + pom + import + + + +---- + +Next we need to introduce Spring Cloud Alibaba Cloud SMS Starter. + +[source,xml] +---- + + org.springframework.cloud + spring-cloud-starter-alicloud-sms + +---- + +=== How to use SMS API + +==== Configure SMS + +Before you start to use Spring Cloud Alibaba Cloud SMS, please add the following configurations in application.properties. + +[source,properties] +---- +spring.cloud.alicloud.access-key=AK +spring.cloud.alicloud.secret-key=SK +---- + +access-key and secret-key is the AK/SK of your Alibaba Cloud account. If you don’t have one, please register an account first, and log on to https://usercenter.console.aliyun.com/#/manage/ak[Alibaba Cloud AK/SK Management] to get your AccessKey ID and Access Key Secret . If you haven’t create the AccessKeys, click “Create AccessKey” to create one. + +==== Introduce SMS API + +The SMS API in Spring Cloud Alicloud SMS is based on Alibaba Cloud SMS SDK. It has a single SMS sending, multiple SMS bulk sending, SMS query, SMS message (SMS receipt message and Upstream SMS message) class operation API. + +The following is a simple example of how to use SMS api to send short message: + +[source,java] +---- +@SpringBootApplication +public class SmsApplication { + + @Autowired + private ISmsService smsService; + + @RequestMapping("/batch-sms-send.do") + public SendBatchSmsResponse batchsendCheckCode( + @RequestParam(name = "code") String code) { + + SendSmsRequest request = new SendSmsRequest(); + // Required:the mobile number + request.setPhoneNumbers("152******"); + // Required:SMS-SignName-could be found in sms console + request.setSignName("******"); + // Required:Template-could be found in sms console + request.setTemplateCode("******"); + // Required:The param of sms template.For exmaple, if the template is "Hello,your verification code is ${code}". The param should be like following value + request.setTemplateParam("{\"code\":\"" + code + "\"}"); + SendSmsResponse sendSmsResponse ; + try { + sendSmsResponse = smsService.sendSmsRequest(request); + } + catch (ClientException e) { + e.printStackTrace(); + sendSmsResponse = new SendSmsResponse(); + } + return sendSmsResponse ; + } + + public static void main(String[] args) throws URISyntaxException { + SpringApplication.run(SmsApplication.class, args); + } + +} +---- + +Before you send your messages, please https://account.aliyun.com/register/register.htm?spm=5176.8142029.388261.26.e9396d3eaYK2sG&oauth_callback=https%3A%2F%2Fwww.aliyun.com%2F[Register an Alibaba Cloud Account]. If you already have one, please https://dysms.console.aliyun.com/dysms.htm?spm=5176.8195934.1283918..18924183bHPct2&accounttraceid=c8cb4243-3080-4eb1-96b0-1f2316584269#/[Turn on SMS Service]. + +For more information about SMS , please refer to the SMS official https://help.aliyun.com/document_detail/55284.html?spm=a2c4g.11186623.6.568.715e4f30ZiVkbI[SMS] (SendSms)---JAVA] docs . + +NOTE: Due to an issue with the earlier SMS sdk version, if the text message fails to be sent, please delete the line of code that contains the explicit MethodType as POST. If you still have problems, please contact us as soon as possible. + +=== The Advanced Features of SMS Api + +In order to reduce the cost of learning, the API interface of the Spring Cloud Alicloud SMS package is kept as consistent as the API and Example provided by the official website. + +* Batch SMS sending + +Refer to the following example to quickly develop a feature with bulk SMS sending. Add the following code in the Controller or create a new Controller: + +[source,java] +---- +@RequestMapping("/batch-sms-send.do") +public SendBatchSmsResponse batchsendCheckCode( + @RequestParam(name = "code") String code) { + SendBatchSmsRequest request = new SendBatchSmsRequest(); + request.setMethod(MethodType.GET); + request.setPhoneNumberJson("[\"177********\",\"130********\"]"); + request.setSignNameJson("[\"*******\",\"*******\"]"); + request.setTemplateCode("******"); + request.setTemplateParamJson( + "[{\"code\":\"" + code + "\"},{\"code\":\"" + code + "\"}]"); + SendBatchSmsResponse sendSmsResponse ; + try { + sendSmsResponse = smsService + .sendSmsBatchRequest(request); + return sendSmsResponse; + } + catch (ClientException e) { + e.printStackTrace(); + sendSmsResponse = new SendBatchSmsResponse(); + } + return sendSmsResponse ; +} +---- + +NOTE: The MethodType of the request is set to GET, which is somewhat different from the example given by the official website. This is because the inconsistent version of the dependent Alibaba Cloud POP API version causes incompatibility issues, set to GET. + +More parameter descriptions can be https://help.aliyun.com/document_detail/66041.html?spm=a2c4g.11186623.6.571.631315e8AauJhP[reference here] + +* SMS Query + +Refer to the following example to quickly develop a history of sending SMS messages based on a specified number. Add the following code in the Controller or create a new Controller: + +[source,java] +---- +@RequestMapping("/query.do") +public QuerySendDetailsResponse querySendDetailsResponse( + @RequestParam(name = "tel") String telephone) { + QuerySendDetailsRequest request = new QuerySendDetailsRequest(); + request.setPhoneNumber(telephone); + request.setSendDate("20190103"); + request.setPageSize(10L); + request.setCurrentPage(1L); + try { + QuerySendDetailsResponse response = smsService.querySendDetails(request); + return response; + } + catch (ClientException e) { + e.printStackTrace(); + } + + return new QuerySendDetailsResponse(); +} + +---- + +More parameter descriptions can be found at https://help.aliyun.com/document_detail/55289.html?spm=a2c4g.11186623.6.569.4f852c78mugEfx[reference here] + +* SMS receipt message + +By subscribing to the SmsReport SMS status report, you can know the status of each SMS message and whether it knows the status and related information of the terminal user. These efforts have been encapsulated internally by Spring Cloud AliCloud SMS. You only need to complete the following two steps. + +1、Configure the queue name for SmsReport in the `application.properties` configuration file (which can also be application.yaml). + +.application.properties +---- +spring.cloud.alicloud.sms.report-queue-name=Alicom-Queue-********-SmsReport +---- + +2、Implement the SmsReportMessageListener interface and initialize a Spring Bean. + +[source,java] +---- +@Component +public class SmsReportMessageListener + implements org.springframework.cloud.alicloud.sms.SmsReportMessageListener { + + @Override + public boolean dealMessage(Message message) { + //do something + System.err.println(this.getClass().getName() + "; " + message.toString()); + return true; + } +} +---- + +More message body format for Message can be https://help.aliyun.com/document_detail/55496.html?spm=a2c4g.11186623.6.570.7f792c78rOiWXO[reference here]. + +* Upstream SMS message + +By subscribing to the SmsUp upstream SMS message, you can know the content of the end user replying to the SMS. These efforts have also been packaged by Spring Cloud AliCloud SMS. You only need to complete the following two steps. + +1、Configure the queue name for SmsReport in the `application.properties` configuration file (which can also be application.yaml). + +.application.properties +---- +spring.cloud.alicloud.sms.up-queue-name=Alicom-Queue-********-SmsUp +---- + +2、Implement the SmsUpMessageListener interface and initialize a Spring Bean. + +[source,java] +---- +@Component +public class SmsUpMessageListener + implements org.springframework.cloud.alicloud.sms.SmsUpMessageListener { + + @Override + public boolean dealMessage(Message message) { + //do something + System.err.println(this.getClass().getName() + "; " + message.toString()); + return true; + } +} +---- + +More message body format for Message can be https://help.aliyun.com/document_detail/55496.html?spm=a2c4g.11186623.6.570.7f792c78rOiWXO[reference here]. diff --git a/spring-cloud-alicloud-sms/pom.xml b/spring-cloud-alicloud-sms/pom.xml index b69530a0..4b925016 100644 --- a/spring-cloud-alicloud-sms/pom.xml +++ b/spring-cloud-alicloud-sms/pom.xml @@ -61,13 +61,6 @@ true - - org.slf4j - slf4j-api - provided - true - - org.springframework.boot spring-boot-starter-test From 5e9cfaba0ef06723d4d827704b69ace6a5ccbed1 Mon Sep 17 00:00:00 2001 From: fangjian0423 Date: Mon, 4 Mar 2019 15:38:01 +0800 Subject: [PATCH 04/10] refactor sms log --- spring-cloud-alicloud-sms/pom.xml | 7 +++++++ .../cloud/alicloud/sms/SmsServiceImpl.java | 13 +++++++++---- .../sms/base/DefaultAlicomMessagePuller.java | 7 ++++--- .../alicloud/sms/base/TokenGetterForAlicom.java | 6 +++--- 4 files changed, 23 insertions(+), 10 deletions(-) diff --git a/spring-cloud-alicloud-sms/pom.xml b/spring-cloud-alicloud-sms/pom.xml index 4b925016..b69530a0 100644 --- a/spring-cloud-alicloud-sms/pom.xml +++ b/spring-cloud-alicloud-sms/pom.xml @@ -61,6 +61,13 @@ true + + org.slf4j + slf4j-api + provided + true + + org.springframework.boot spring-boot-starter-test diff --git a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/SmsServiceImpl.java b/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/SmsServiceImpl.java index 3b83cfb6..91a0cccb 100644 --- a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/SmsServiceImpl.java +++ b/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/SmsServiceImpl.java @@ -17,15 +17,20 @@ package org.springframework.cloud.alicloud.sms; import java.text.ParseException; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.cloud.alicloud.context.AliCloudProperties; import org.springframework.cloud.alicloud.context.sms.SmsProperties; import org.springframework.cloud.alicloud.sms.base.DefaultAlicomMessagePuller; import org.springframework.cloud.alicloud.sms.endpoint.EndpointManager; import org.springframework.cloud.alicloud.sms.endpoint.ReceiveMessageEntity; -import com.aliyuncs.dysmsapi.model.v20170525.*; +import com.aliyuncs.dysmsapi.model.v20170525.QuerySendDetailsRequest; +import com.aliyuncs.dysmsapi.model.v20170525.QuerySendDetailsResponse; +import com.aliyuncs.dysmsapi.model.v20170525.SendBatchSmsRequest; +import com.aliyuncs.dysmsapi.model.v20170525.SendBatchSmsResponse; +import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest; +import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.exceptions.ServerException; @@ -34,7 +39,7 @@ import com.aliyuncs.exceptions.ServerException; */ public final class SmsServiceImpl extends AbstractSmsService { - private static final Log log = LogFactory.getLog(SmsServiceImpl.class); + private static final Logger log = LoggerFactory.getLogger(SmsServiceImpl.class); /** * will expose user to call this method send sms message * @param sendSmsRequest diff --git a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/DefaultAlicomMessagePuller.java b/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/DefaultAlicomMessagePuller.java index b7bea267..df03a071 100755 --- a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/DefaultAlicomMessagePuller.java +++ b/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/DefaultAlicomMessagePuller.java @@ -26,8 +26,8 @@ import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledThreadPoolExecutor; import org.apache.commons.lang3.concurrent.BasicThreadFactory; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import com.aliyun.mns.client.CloudQueue; import com.aliyun.mns.common.ClientException; @@ -39,7 +39,8 @@ import com.aliyun.mns.model.Message; */ public class DefaultAlicomMessagePuller { - private Log log = LogFactory.getLog(DefaultAlicomMessagePuller.class); + private static final Logger log = LoggerFactory + .getLogger(DefaultAlicomMessagePuller.class); private String mnsAccountEndpoint = "https://1943695596114318.mns.cn-hangzhou.aliyuncs.com/";// 阿里通信消息的endpoint,固定。 private String endpointNameForPop = "cn-hangzhou"; diff --git a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/TokenGetterForAlicom.java b/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/TokenGetterForAlicom.java index ac6b41d0..d870b347 100755 --- a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/TokenGetterForAlicom.java +++ b/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/TokenGetterForAlicom.java @@ -21,8 +21,8 @@ import java.util.TimeZone; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import com.aliyun.mns.client.CloudAccount; import com.aliyun.mns.client.CloudQueue; @@ -42,7 +42,7 @@ import com.aliyuncs.profile.IClientProfile; * */ public class TokenGetterForAlicom { - private Log log = LogFactory.getLog(TokenGetterForAlicom.class); + private static final Logger log = LoggerFactory.getLogger(TokenGetterForAlicom.class); private String accessKeyId; private String accessKeySecret; private String endpointNameForPop; From 0e4de156329a718dc889bfd674fced6a79149436 Mon Sep 17 00:00:00 2001 From: fangjian0423 Date: Mon, 4 Mar 2019 15:38:57 +0800 Subject: [PATCH 05/10] update sms example --- .../sms-example/src/main/resources/application.properties | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/spring-cloud-alibaba-examples/sms-example/src/main/resources/application.properties b/spring-cloud-alibaba-examples/sms-example/src/main/resources/application.properties index 8c689827..4464cfe9 100644 --- a/spring-cloud-alibaba-examples/sms-example/src/main/resources/application.properties +++ b/spring-cloud-alibaba-examples/sms-example/src/main/resources/application.properties @@ -1,4 +1,9 @@ spring.application.name=sca-sms-example server.port=9051 -# config management +# config sms +spring.cloud.alicloud.access-key=***** +spring.cloud.alicloud.secret-key=****** +spring.cloud.alicloud.sms.report-queue-name=***** +spring.cloud.alicloud.sms.up-queue-name=***** +#config endpoint management.endpoints.web.exposure.include=* \ No newline at end of file From 80d27a18244d9c84f46bae1cce300aed9f2aafe9 Mon Sep 17 00:00:00 2001 From: fangjian0423 Date: Mon, 4 Mar 2019 16:46:05 +0800 Subject: [PATCH 06/10] sentinel zuul refactor --- .../zuul/SentinelZuulAutoConfiguration.java | 128 +++++++++--------- .../listener/FallBackProviderHandler.java | 45 ++++++ .../listener/FallBackProviderListener.java | 43 ------ 3 files changed, 111 insertions(+), 105 deletions(-) create mode 100644 spring-cloud-alibaba-sentinel-zuul/src/main/java/org/springframework/cloud/alibaba/sentinel/zuul/listener/FallBackProviderHandler.java delete mode 100644 spring-cloud-alibaba-sentinel-zuul/src/main/java/org/springframework/cloud/alibaba/sentinel/zuul/listener/FallBackProviderListener.java diff --git a/spring-cloud-alibaba-sentinel-zuul/src/main/java/org/springframework/cloud/alibaba/sentinel/zuul/SentinelZuulAutoConfiguration.java b/spring-cloud-alibaba-sentinel-zuul/src/main/java/org/springframework/cloud/alibaba/sentinel/zuul/SentinelZuulAutoConfiguration.java index 73d4cf79..ea79fdc3 100644 --- a/spring-cloud-alibaba-sentinel-zuul/src/main/java/org/springframework/cloud/alibaba/sentinel/zuul/SentinelZuulAutoConfiguration.java +++ b/spring-cloud-alibaba-sentinel-zuul/src/main/java/org/springframework/cloud/alibaba/sentinel/zuul/SentinelZuulAutoConfiguration.java @@ -16,6 +16,17 @@ package org.springframework.cloud.alibaba.sentinel.zuul; +import static org.springframework.cloud.alibaba.sentinel.zuul.SentinelZuulAutoConfiguration.PREFIX; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.support.DefaultListableBeanFactory; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.cloud.alibaba.sentinel.zuul.listener.FallBackProviderHandler; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.env.Environment; + import com.alibaba.csp.sentinel.adapter.zuul.fallback.DefaultRequestOriginParser; import com.alibaba.csp.sentinel.adapter.zuul.fallback.DefaultUrlCleaner; import com.alibaba.csp.sentinel.adapter.zuul.fallback.RequestOriginParser; @@ -25,17 +36,8 @@ import com.alibaba.csp.sentinel.adapter.zuul.filters.SentinelPostFilter; import com.alibaba.csp.sentinel.adapter.zuul.filters.SentinelPreFilter; import com.alibaba.csp.sentinel.adapter.zuul.properties.SentinelZuulProperties; import com.alibaba.csp.sentinel.util.StringUtil; -import com.netflix.zuul.ZuulFilter; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.support.DefaultListableBeanFactory; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.cloud.alibaba.sentinel.zuul.listener.FallBackProviderListener; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.env.Environment; -import static org.springframework.cloud.alibaba.sentinel.zuul.SentinelZuulAutoConfiguration.PREFIX; +import com.netflix.zuul.ZuulFilter; /** * Sentinel Spring Cloud Zuul AutoConfiguration @@ -46,65 +48,67 @@ import static org.springframework.cloud.alibaba.sentinel.zuul.SentinelZuulAutoCo @ConditionalOnProperty(prefix = PREFIX, name = "enabled", havingValue = "true") public class SentinelZuulAutoConfiguration { - @Autowired - private Environment environment; + @Autowired + private Environment environment; - public static final String PREFIX = "spring.cloud.alibaba.sentinel.zuul"; + public static final String PREFIX = "spring.cloud.alibaba.sentinel.zuul"; - @Bean - public SentinelZuulProperties sentinelZuulProperties() { - SentinelZuulProperties properties = new SentinelZuulProperties(); - String enabledStr = environment.getProperty(PREFIX + "." + "enabled"); - String preOrderStr = environment.getProperty(PREFIX + "." + "order.pre"); - String postOrderStr = environment.getProperty(PREFIX + "." + "order.post"); - String errorOrderStr = environment.getProperty(PREFIX + "." + "order.error"); - if (StringUtil.isNotEmpty(enabledStr)) { - Boolean enabled = Boolean.valueOf(enabledStr); - properties.setEnabled(enabled); - } - if (StringUtil.isNotEmpty(preOrderStr)) { - properties.getOrder().setPre(Integer.parseInt(preOrderStr)); - } - if (StringUtil.isNotEmpty(postOrderStr)) { - properties.getOrder().setPost(Integer.parseInt(postOrderStr)); - } - if (StringUtil.isNotEmpty(errorOrderStr)) { - properties.getOrder().setError(Integer.parseInt(errorOrderStr)); - } - return properties; - } + @Bean + public SentinelZuulProperties sentinelZuulProperties() { + SentinelZuulProperties properties = new SentinelZuulProperties(); + String enabledStr = environment.getProperty(PREFIX + "." + "enabled"); + String preOrderStr = environment.getProperty(PREFIX + "." + "order.pre"); + String postOrderStr = environment.getProperty(PREFIX + "." + "order.post"); + String errorOrderStr = environment.getProperty(PREFIX + "." + "order.error"); + if (StringUtil.isNotEmpty(enabledStr)) { + Boolean enabled = Boolean.valueOf(enabledStr); + properties.setEnabled(enabled); + } + if (StringUtil.isNotEmpty(preOrderStr)) { + properties.getOrder().setPre(Integer.parseInt(preOrderStr)); + } + if (StringUtil.isNotEmpty(postOrderStr)) { + properties.getOrder().setPost(Integer.parseInt(postOrderStr)); + } + if (StringUtil.isNotEmpty(errorOrderStr)) { + properties.getOrder().setError(Integer.parseInt(errorOrderStr)); + } + return properties; + } - @Bean - @ConditionalOnMissingBean(UrlCleaner.class) - public UrlCleaner urlCleaner(){ - return new DefaultUrlCleaner(); - } + @Bean + @ConditionalOnMissingBean(UrlCleaner.class) + public UrlCleaner urlCleaner() { + return new DefaultUrlCleaner(); + } - @Bean - @ConditionalOnMissingBean(RequestOriginParser.class) - public RequestOriginParser requestOriginParser(){ - return new DefaultRequestOriginParser(); - } + @Bean + @ConditionalOnMissingBean(RequestOriginParser.class) + public RequestOriginParser requestOriginParser() { + return new DefaultRequestOriginParser(); + } - @Bean - public ZuulFilter preFilter(SentinelZuulProperties sentinelZuulProperties,UrlCleaner urlCleaner, - RequestOriginParser requestOriginParser) { - return new SentinelPreFilter(sentinelZuulProperties,urlCleaner,requestOriginParser); - } + @Bean + public ZuulFilter preFilter(SentinelZuulProperties sentinelZuulProperties, + UrlCleaner urlCleaner, RequestOriginParser requestOriginParser) { + return new SentinelPreFilter(sentinelZuulProperties, urlCleaner, + requestOriginParser); + } - @Bean - public ZuulFilter postFilter(SentinelZuulProperties sentinelZuulProperties) { - return new SentinelPostFilter(sentinelZuulProperties); - } + @Bean + public ZuulFilter postFilter(SentinelZuulProperties sentinelZuulProperties) { + return new SentinelPostFilter(sentinelZuulProperties); + } - @Bean - public ZuulFilter errorFilter(SentinelZuulProperties sentinelZuulProperties) { - return new SentinelErrorFilter(sentinelZuulProperties); - } + @Bean + public ZuulFilter errorFilter(SentinelZuulProperties sentinelZuulProperties) { + return new SentinelErrorFilter(sentinelZuulProperties); + } - @Bean - public FallBackProviderListener fallBackProviderListener(DefaultListableBeanFactory beanFactory) { - return new FallBackProviderListener(beanFactory); - } + @Bean + public FallBackProviderHandler fallBackProviderListener( + DefaultListableBeanFactory beanFactory) { + return new FallBackProviderHandler(beanFactory); + } } diff --git a/spring-cloud-alibaba-sentinel-zuul/src/main/java/org/springframework/cloud/alibaba/sentinel/zuul/listener/FallBackProviderHandler.java b/spring-cloud-alibaba-sentinel-zuul/src/main/java/org/springframework/cloud/alibaba/sentinel/zuul/listener/FallBackProviderHandler.java new file mode 100644 index 00000000..ce19613b --- /dev/null +++ b/spring-cloud-alibaba-sentinel-zuul/src/main/java/org/springframework/cloud/alibaba/sentinel/zuul/listener/FallBackProviderHandler.java @@ -0,0 +1,45 @@ +package org.springframework.cloud.alibaba.sentinel.zuul.listener; + +import java.util.Map; + +import org.apache.commons.collections.MapUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.SmartInitializingSingleton; +import org.springframework.beans.factory.support.DefaultListableBeanFactory; + +import com.alibaba.csp.sentinel.adapter.zuul.fallback.DefaultBlockFallbackProvider; +import com.alibaba.csp.sentinel.adapter.zuul.fallback.ZuulBlockFallbackManager; +import com.alibaba.csp.sentinel.adapter.zuul.fallback.ZuulBlockFallbackProvider; + +/** + * @author tiger + */ +public class FallBackProviderHandler implements SmartInitializingSingleton { + + private static final Logger logger = LoggerFactory + .getLogger(FallBackProviderHandler.class); + + private final DefaultListableBeanFactory beanFactory; + + public FallBackProviderHandler(DefaultListableBeanFactory beanFactory) { + this.beanFactory = beanFactory; + } + + @Override + public void afterSingletonsInstantiated() { + Map providerMap = beanFactory + .getBeansOfType(ZuulBlockFallbackProvider.class); + if (MapUtils.isNotEmpty(providerMap)) { + providerMap.forEach((k, v) -> { + logger.info("[Sentinel Zuul] Register provider name:{}, instance: {}", k, + v); + ZuulBlockFallbackManager.registerProvider(v); + }); + } + else { + logger.info("[Sentinel Zuul] Register default fallback provider. "); + ZuulBlockFallbackManager.registerProvider(new DefaultBlockFallbackProvider()); + } + } +} diff --git a/spring-cloud-alibaba-sentinel-zuul/src/main/java/org/springframework/cloud/alibaba/sentinel/zuul/listener/FallBackProviderListener.java b/spring-cloud-alibaba-sentinel-zuul/src/main/java/org/springframework/cloud/alibaba/sentinel/zuul/listener/FallBackProviderListener.java deleted file mode 100644 index d727a0e4..00000000 --- a/spring-cloud-alibaba-sentinel-zuul/src/main/java/org/springframework/cloud/alibaba/sentinel/zuul/listener/FallBackProviderListener.java +++ /dev/null @@ -1,43 +0,0 @@ -package org.springframework.cloud.alibaba.sentinel.zuul.listener; - -import com.alibaba.csp.sentinel.adapter.zuul.fallback.DefaultBlockFallbackProvider; -import com.alibaba.csp.sentinel.adapter.zuul.fallback.ZuulBlockFallbackManager; -import com.alibaba.csp.sentinel.adapter.zuul.fallback.ZuulBlockFallbackProvider; -import org.apache.commons.collections.MapUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.SmartInitializingSingleton; -import org.springframework.beans.factory.support.DefaultListableBeanFactory; -import org.springframework.boot.context.event.ApplicationStartedEvent; -import org.springframework.context.event.EventListener; - -import java.util.Map; - - -/** - * @author tiger - */ -public class FallBackProviderListener implements SmartInitializingSingleton { - - private static final Logger logger = LoggerFactory.getLogger(FallBackProviderListener.class); - - private final DefaultListableBeanFactory beanFactory; - - public FallBackProviderListener(DefaultListableBeanFactory beanFactory) { - this.beanFactory = beanFactory; - } - - @Override - public void afterSingletonsInstantiated() { - Map providerMap = beanFactory.getBeansOfType(ZuulBlockFallbackProvider.class); - if (MapUtils.isNotEmpty(providerMap)) { - providerMap.forEach((k, v) -> { - logger.info("[Sentinel] Register provider name:{}, instance: {}", k, v); - ZuulBlockFallbackManager.registerProvider(v); - }); - } else { - logger.info("[Sentinel] Register default fallback provider. "); - ZuulBlockFallbackManager.registerProvider(new DefaultBlockFallbackProvider()); - } - } -} From 3049f727de4257956638f64ccdf15de69853ffbb Mon Sep 17 00:00:00 2001 From: fangjian0423 Date: Mon, 4 Mar 2019 16:52:38 +0800 Subject: [PATCH 07/10] sentinel zuul rename package name --- .../alibaba/sentinel/zuul/SentinelZuulAutoConfiguration.java | 2 +- .../zuul/{listener => handler}/FallBackProviderHandler.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename spring-cloud-alibaba-sentinel-zuul/src/main/java/org/springframework/cloud/alibaba/sentinel/zuul/{listener => handler}/FallBackProviderHandler.java (95%) diff --git a/spring-cloud-alibaba-sentinel-zuul/src/main/java/org/springframework/cloud/alibaba/sentinel/zuul/SentinelZuulAutoConfiguration.java b/spring-cloud-alibaba-sentinel-zuul/src/main/java/org/springframework/cloud/alibaba/sentinel/zuul/SentinelZuulAutoConfiguration.java index ea79fdc3..5a1ac04b 100644 --- a/spring-cloud-alibaba-sentinel-zuul/src/main/java/org/springframework/cloud/alibaba/sentinel/zuul/SentinelZuulAutoConfiguration.java +++ b/spring-cloud-alibaba-sentinel-zuul/src/main/java/org/springframework/cloud/alibaba/sentinel/zuul/SentinelZuulAutoConfiguration.java @@ -22,7 +22,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.cloud.alibaba.sentinel.zuul.listener.FallBackProviderHandler; +import org.springframework.cloud.alibaba.sentinel.zuul.handler.FallBackProviderHandler; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; diff --git a/spring-cloud-alibaba-sentinel-zuul/src/main/java/org/springframework/cloud/alibaba/sentinel/zuul/listener/FallBackProviderHandler.java b/spring-cloud-alibaba-sentinel-zuul/src/main/java/org/springframework/cloud/alibaba/sentinel/zuul/handler/FallBackProviderHandler.java similarity index 95% rename from spring-cloud-alibaba-sentinel-zuul/src/main/java/org/springframework/cloud/alibaba/sentinel/zuul/listener/FallBackProviderHandler.java rename to spring-cloud-alibaba-sentinel-zuul/src/main/java/org/springframework/cloud/alibaba/sentinel/zuul/handler/FallBackProviderHandler.java index ce19613b..564fc446 100644 --- a/spring-cloud-alibaba-sentinel-zuul/src/main/java/org/springframework/cloud/alibaba/sentinel/zuul/listener/FallBackProviderHandler.java +++ b/spring-cloud-alibaba-sentinel-zuul/src/main/java/org/springframework/cloud/alibaba/sentinel/zuul/handler/FallBackProviderHandler.java @@ -1,4 +1,4 @@ -package org.springframework.cloud.alibaba.sentinel.zuul.listener; +package org.springframework.cloud.alibaba.sentinel.zuul.handler; import java.util.Map; From f126d57cc888bd14d3dffae6048ed2fcfa97728c Mon Sep 17 00:00:00 2001 From: fangjian0423 Date: Mon, 4 Mar 2019 20:48:22 +0800 Subject: [PATCH 08/10] modify sentinel zuul prefix configuration properties --- .../alibaba/sentinel/zuul/SentinelZuulAutoConfiguration.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-cloud-alibaba-sentinel-zuul/src/main/java/org/springframework/cloud/alibaba/sentinel/zuul/SentinelZuulAutoConfiguration.java b/spring-cloud-alibaba-sentinel-zuul/src/main/java/org/springframework/cloud/alibaba/sentinel/zuul/SentinelZuulAutoConfiguration.java index 5a1ac04b..35577cae 100644 --- a/spring-cloud-alibaba-sentinel-zuul/src/main/java/org/springframework/cloud/alibaba/sentinel/zuul/SentinelZuulAutoConfiguration.java +++ b/spring-cloud-alibaba-sentinel-zuul/src/main/java/org/springframework/cloud/alibaba/sentinel/zuul/SentinelZuulAutoConfiguration.java @@ -45,13 +45,13 @@ import com.netflix.zuul.ZuulFilter; * @author tiger */ @Configuration -@ConditionalOnProperty(prefix = PREFIX, name = "enabled", havingValue = "true") +@ConditionalOnProperty(prefix = PREFIX, name = "enabled", havingValue = "true", matchIfMissing = true) public class SentinelZuulAutoConfiguration { @Autowired private Environment environment; - public static final String PREFIX = "spring.cloud.alibaba.sentinel.zuul"; + public static final String PREFIX = "spring.cloud.sentinel.zuul"; @Bean public SentinelZuulProperties sentinelZuulProperties() { From bfcabfd068e21e9a913fae63f6ee268fd99abd11 Mon Sep 17 00:00:00 2001 From: fangjian0423 Date: Mon, 4 Mar 2019 20:48:54 +0800 Subject: [PATCH 09/10] add switch to instance CommonFilter in SentinelProperties --- .../src/main/asciidoc-zh/sentinel.adoc | 1 + .../src/main/asciidoc/sentinel.adoc | 1 + .../alibaba/sentinel/SentinelProperties.java | 27 ++++++++++++++----- .../SentinelWebAutoConfiguration.java | 12 +++++---- ...itional-spring-configuration-metadata.json | 6 +++++ 5 files changed, 36 insertions(+), 11 deletions(-) diff --git a/spring-cloud-alibaba-docs/src/main/asciidoc-zh/sentinel.adoc b/spring-cloud-alibaba-docs/src/main/asciidoc-zh/sentinel.adoc index b0a5fb45..4cd91b44 100644 --- a/spring-cloud-alibaba-docs/src/main/asciidoc-zh/sentinel.adoc +++ b/spring-cloud-alibaba-docs/src/main/asciidoc-zh/sentinel.adoc @@ -272,6 +272,7 @@ Sentinel Endpoint 里暴露的信息非常有用。包括当前应用的所有 |`spring.cloud.sentinel.transport.client-ip`|客户端IP| |`spring.cloud.sentinel.filter.order`|Servlet Filter的加载顺序。Starter内部会构造这个filter|Integer.MIN_VALUE |`spring.cloud.sentinel.filter.url-patterns`|数据类型是数组。表示Servlet Filter的url pattern集合|/* +|`spring.cloud.sentinel.filter.enabled`|Enable to instance CommonFilter|true |`spring.cloud.sentinel.metric.charset`|metric文件字符集|UTF-8 |`spring.cloud.sentinel.metric.file-single-size`|Sentinel metric 单个文件的大小| |`spring.cloud.sentinel.metric.file-total-count`|Sentinel metric 总文件数量| diff --git a/spring-cloud-alibaba-docs/src/main/asciidoc/sentinel.adoc b/spring-cloud-alibaba-docs/src/main/asciidoc/sentinel.adoc index d5e6d03a..4cfb6bff 100644 --- a/spring-cloud-alibaba-docs/src/main/asciidoc/sentinel.adoc +++ b/spring-cloud-alibaba-docs/src/main/asciidoc/sentinel.adoc @@ -271,6 +271,7 @@ The following table shows all the configurations of Spring Cloud Alibaba Sentine |`spring.cloud.sentinel.transport.client-ip`|Client IP| |`spring.cloud.sentinel.filter.order`|Loading order of Servlet Filter. The filter will be constructed in the Starter|Integer.MIN_VALUE |`spring.cloud.sentinel.filter.url-patterns`|Data type is array. Refers to the collection of Servlet Filter ULR patterns|/* +|`spring.cloud.sentinel.filter.enabled`|Enable to instance CommonFilter|true |`spring.cloud.sentinel.metric.charset`|metric file character set|UTF-8 |`spring.cloud.sentinel.metric.fileSingleSize`|Sentinel metric single file size| |`spring.cloud.sentinel.metric.fileTotalCount`|Sentinel metric total file number| diff --git a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/SentinelProperties.java b/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/SentinelProperties.java index d4621bd7..68cedb64 100644 --- a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/SentinelProperties.java +++ b/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/SentinelProperties.java @@ -16,17 +16,18 @@ package org.springframework.cloud.alibaba.sentinel; -import com.alibaba.csp.sentinel.config.SentinelConfig; -import com.alibaba.csp.sentinel.log.LogBase; -import com.alibaba.csp.sentinel.transport.config.TransportConfig; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; + import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.cloud.alibaba.sentinel.datasource.config.DataSourcePropertiesConfiguration; import org.springframework.core.Ordered; import org.springframework.validation.annotation.Validated; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; +import com.alibaba.csp.sentinel.config.SentinelConfig; +import com.alibaba.csp.sentinel.log.LogBase; +import com.alibaba.csp.sentinel.transport.config.TransportConfig; /** * {@link ConfigurationProperties} for Sentinel. @@ -306,6 +307,12 @@ public class SentinelProperties { */ private List urlPatterns; + /** + * Enable to instance + * {@link com.alibaba.csp.sentinel.adapter.servlet.CommonFilter}. + */ + private boolean enabled = true; + public int getOrder() { return this.order; } @@ -321,6 +328,14 @@ public class SentinelProperties { public void setUrlPatterns(List urlPatterns) { this.urlPatterns = urlPatterns; } + + public boolean isEnabled() { + return enabled; + } + + public void setEnabled(boolean enabled) { + this.enabled = enabled; + } } public static class Log { diff --git a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/SentinelWebAutoConfiguration.java b/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/SentinelWebAutoConfiguration.java index 1eea41e9..5a73f2cb 100644 --- a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/SentinelWebAutoConfiguration.java +++ b/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/SentinelWebAutoConfiguration.java @@ -16,7 +16,10 @@ package org.springframework.cloud.alibaba.sentinel; -import com.alibaba.csp.sentinel.adapter.servlet.CommonFilter; +import java.util.ArrayList; +import java.util.List; + +import javax.servlet.Filter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -28,9 +31,7 @@ import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import javax.servlet.Filter; -import java.util.ArrayList; -import java.util.List; +import com.alibaba.csp.sentinel.adapter.servlet.CommonFilter; /** * @author xiaojing @@ -48,7 +49,8 @@ public class SentinelWebAutoConfiguration { private SentinelProperties properties; @Bean - public FilterRegistrationBean servletRequestListener() { + @ConditionalOnProperty(name = "spring.cloud.sentinel.filter.enabled", matchIfMissing = true) + public FilterRegistrationBean sentinelFilter() { FilterRegistrationBean registration = new FilterRegistrationBean<>(); SentinelProperties.Filter filterConfig = properties.getFilter(); diff --git a/spring-cloud-alibaba-sentinel/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/spring-cloud-alibaba-sentinel/src/main/resources/META-INF/additional-spring-configuration-metadata.json index b445fc6a..80fec1a5 100644 --- a/spring-cloud-alibaba-sentinel/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ b/spring-cloud-alibaba-sentinel/src/main/resources/META-INF/additional-spring-configuration-metadata.json @@ -39,6 +39,12 @@ "defaultValue": "Integer.MIN_VALUE", "description": "sentinel filter chain order, will be set to FilterRegistrationBean." }, + { + "name": "spring.cloud.sentinel.filter.enabled", + "type": "java.lang.Boolean", + "defaultValue": true, + "description": "Enable to instance com.alibaba.csp.sentinel.adapter.servlet.CommonFilter." + }, { "name": "spring.cloud.sentinel.metric.charset", "type": "java.lang.String", From 72bf5a1453177eb408ddd25b417bbb67737360b0 Mon Sep 17 00:00:00 2001 From: fangjian0423 Date: Tue, 5 Mar 2019 11:24:58 +0800 Subject: [PATCH 10/10] remove useless log --- .../cloud/alicloud/sms/base/TokenGetterForAlicom.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/TokenGetterForAlicom.java b/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/TokenGetterForAlicom.java index d870b347..e312ec36 100755 --- a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/TokenGetterForAlicom.java +++ b/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/TokenGetterForAlicom.java @@ -125,8 +125,6 @@ public class TokenGetterForAlicom { CloudAccount account = new CloudAccount(token.getTempAccessKeyId(), token.getTempAccessKeySecret(), mnsAccountEndpoint, token.getToken()); - // log.warn("ak:"+token.getTempAccessKey()); - // log.warn("token:"+token.getToken()); MNSClient client = account.getMNSClient(); CloudQueue queue = client.getQueueRef(queueName); token.setClient(client);