SpringCloudAlibaba官方文档(2022.0.0.0RC1)

SpringCloudAlibaba致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用服务的必需组件,方便开发者通过SpringCloud编程模型轻松使用这些组件来开发分布式应用服务。

依托SpringCloudAlibaba,您只需要添加一些注解和少量配置,就可以将SpringCloud应用接入阿里分布式应用解决方案,通过阿里中间件来迅速搭建分布式应用系统。

目前SpringCloudAlibaba提供了如下功能:

SpringCloudAlibabaBOM包含了它所使用的所有依赖的版本。

如果您是MavenCentral用户,请将我们的BOM添加到您的pom.xml中的部分。这将允许您省略任何Maven依赖项的版本,而是将版本控制委派给BOM。

Nacos是一个Alibaba开源的、易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

使用SpringCloudAlibabaNacosDiscovery,可基于SpringCloud的编程模型快速接入Nacos服务注册功能。

如果要在您的项目中使用Nacos来实现服务注册/发现,使用groupID为com.alibaba.cloud和artifactID为spring-cloud-starter-alibaba-nacos-discovery的starter。

com.alibaba.cloudspring-cloud-starter-alibaba-nacos-discovery3.3.一个使用NacosDiscovery进行服务注册/发现并调用的例子NacosDiscovery适配了NetflixRibbon,可以使用RestTemplate或OpenFeign进行服务的调用。

Figure1.NacosDashboard

以下步骤向您展示了如何将一个服务注册到Nacos。

pom.xml

server.port=8081spring.application.name=nacos-providerspring.cloud.nacos.discovery.server-addr=127.0.0.1:8848management.endpoints.web.exposure.include=*NOTE如果不想使用Nacos作为您的服务注册与发现,可以将spring.cloud.nacos.discovery设置为false。@SpringBootApplication@EnableDiscoveryClientpublicclassNacosProviderDemoApplication{publicstaticvoidmain(String[]args){SpringApplication.run(NacosProviderDemoApplication.class,args);}@RestControllerpublicclassEchoController{@GetMapping(value="/echo/{string}")publicStringecho(@PathVariableStringstring){return"HelloNacosDiscovery"+string;}}}这个时候你就可以在Nacos的控制台上看到注册上来的服务信息了。

Consumer应用可能还没像启动一个Provider应用那么简单。因为在Consumer端需要去调用Provider端提供的REST服务。例子中我们使用最原始的一种方式,即显示的使用LoadBalanceClient和RestTemplate结合的方式来访问。pom.xml和application.properties的配置可以参考1.2小结。启动一个Consumer应用的示例代码如下所示:

Endpoint暴露的json中包含了两种属性:

这是Endpoint暴露的json示例:

{"subscribe":[{"jsonFromServer":"","name":"nacos-provider","clusters":"","cacheMillis":10000,"hosts":[{"instanceId":"30.5.124.156#8081#DEFAULT#nacos-provider","ip":"30.5.124.156","port":8081,"weight":1.0,"healthy":true,"enabled":true,"cluster":{"serviceName":null,"name":null,"healthChecker":{"type":"TCP"},"defaultPort":80,"defaultCheckPort":80,"useIPPort4Check":true,"metadata":{}},"service":null,"metadata":{}}],"lastRefTime":1541755293119,"checksum":"e5a699c9201f5328241c178e804657e11541755293119","allIPs":false,"key":"nacos-provider","valid":true}],"NacosDiscoveryProperties":{"serverAddr":"127.0.0.1:8848","endpoint":"","namespace":"","logName":"","service":"nacos-provider","weight":1.0,"clusterName":"DEFAULT","metadata":{},"registerEnabled":true,"ip":"30.5.124.201","networkInterface":"","port":8082,"secure":false,"accessKey":"","secretKey":""}}3.5.如何开启权重路由3.5.1.SpringCloudLoadbalancerpom.xml

org.springframework.cloudspring-cloud-loadbalancerapplication.properties

spring.cloud.loadbalancer.ribbon.enabled=falsespring.cloud.loadbalancer.nacos.enabled=true3.6.关于NacosDiscoveryStarter更多的配置项信息更多关于NacosDiscoveryStarter的配置项如下所示:

使用SpringCloudAlibabaNacosConfig,可基于SpringCloud的编程模型快速接入Nacos配置管理功能。

如果要在您的项目中使用Nacos来实现配置管理,使用groupID为com.alibaba.cloud和artifactID为spring-cloud-starter-alibaba-nacos-config的starter。

com.alibaba.cloudspring-cloud-starter-alibaba-nacos-config4.2.快速开始NacosConfig使用DataId和GROUP确定一个配置。

下图表示DataId使用myDataid,GROUP使用DEFAULT_GROUP,配置格式为Properties的一个配置项:

Figure2.NacosConfigItem

具体启动方式参考SpringCloudAlibabaNacosDiscovery小节的"NacosServer启动"章节。

NacosServer启动完毕后,添加如何配置:

DataID:nacos-config.propertiesGroup:DEFAULT_GROUP配置格式:Properties配置内容:user.name=nacos-config-propertiesuser.age=90NOTE注意DataId是以properties(默认的文件扩展名方式)为扩展名。4.2.2.客户端使用方式如果要在您的项目中使用Nacos来实现应用的外部化配置,使用groupID为com.alibaba.cloud和artifactID为spring-cloud-starter-alibaba-nacos-config的starter。

com.alibaba.cloudspring-cloud-starter-alibaba-nacos-config现在创建一个标准的SpringBoot应用。

bootstrap.properties

#DataId默认使用`spring.application.name`配置跟文件扩展名结合(配置格式默认使用properties),GROUP不配置默认使用DEFAULT_GROUP。因此该配置文件对应的NacosConfig配置的DataId为nacos-config.properties,GROUP为DEFAULT_GROUPspring.application.name=nacos-configspring.cloud.nacos.config.server-addr=127.0.0.1:8848NOTE注意当你使用域名的方式来访问Nacos时,spring.cloud.nacos.config.server-addr配置的方式为域名:port。例如Nacos的域名为abc.com.nacos,监听的端口为80,则spring.cloud.nacos.config.server-addr=abc.com.nacos:80。注意80端口不能省略。启动这个Example,可以看到如下输出结果:

2018-11-0214:24:51.638INFO32700---[main]c.a.demo.provider.ConfigApplication:StartedConfigApplicationin14.645seconds(JVMrunningfor15.139)username:nacos-config-properties;age:902018-11-0214:24:51.688INFO32700---[-127.0.0.1:8848]s.c.a.AnnotationConfigApplicationContext:Refreshingorg.springframework.context.annotation.AnnotationConfigApplicationContext@a8c5e74:startupdate[FriNov0214:24:51CST2018];rootofcontexthierarchy4.3.基于DataId为yaml的文件扩展名配置方式NacosConfig除了支持properties格式以外,也支持yaml格式。这个时候只需要完成以下两步:

spring.cloud.nacos.config.file-extension=yaml2、在Nacos的控制台新增一个DataId为yaml为扩展名的配置,如下所示:

DataID:nacos-config.yamlGroup:DEFAULT_GROUP配置格式:YAML配置内容:user.name:nacos-config-yamluser.age:68这两步完成后,重启测试程序,可以看到如下输出结果。

2018-11-0214:59:00.484INFO32928---[main]c.a.demo.provider.ConfigApplication:StartedConfigApplicationin14.183seconds(JVMrunningfor14.671)username:nacos-config-yaml;age:682018-11-0214:59:00.529INFO32928---[-127.0.0.1:8848]s.c.a.AnnotationConfigApplicationContext:Refreshingorg.springframework.context.annotation.AnnotationConfigApplicationContext@265a478e:startupdate[FriNov0214:59:00CST2018];rootofcontexthierarchy4.4.支持配置的动态更新NacosConfig默认支持配置的动态更新,启动SpringBoot应用测试的代码如下:

@SpringBootApplicationpublicclassConfigApplication{publicstaticvoidmain(String[]args){ConfigurableApplicationContextapplicationContext=SpringApplication.run(ConfigApplication.class,args);while(true){//当动态配置刷新时,会更新到Enviroment中,因此这里每隔一秒中从Enviroment中获取配置StringuserName=applicationContext.getEnvironment().getProperty("user.name");StringuserAge=applicationContext.getEnvironment().getProperty("user.age");System.err.println("username:"+userName+";age:"+userAge);TimeUnit.SECONDS.sleep(1);}}}如下所示,当变更user.name时,应用程序中能够获取到最新的值:

spring.profiles.active=developNOTE${spring.profiles.active}当通过配置文件来指定时必须放在bootstrap.properties文件中。Nacos上新增一个DataId为:nacos-config-develop.yaml的基础配置,如下所示:

DataID:nacos-config-develop.yamlGroup:DEFAULT_GROUP配置格式:YAML配置内容:current.env:develop-env启动SpringBoot应用测试的代码如下:

@SpringBootApplicationpublicclassConfigApplication{publicstaticvoidmain(String[]args){ConfigurableApplicationContextapplicationContext=SpringApplication.run(ConfigApplication.class,args);while(true){StringuserName=applicationContext.getEnvironment().getProperty("user.name");StringuserAge=applicationContext.getEnvironment().getProperty("user.age");//获取当前部署的环境StringcurrentEnv=applicationContext.getEnvironment().getProperty("current.env");System.err.println("in"+currentEnv+"enviroment;"+"username:"+userName+";age:"+userAge);TimeUnit.SECONDS.sleep(1);}}}启动后,可见控制台的输出结果:

indevelop-envenviroment;username:nacos-config-yaml-update;age:682018-11-0215:34:25.013INFO33014---[Thread-11]ConfigServletWebServerApplicationContext:Closingorg.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@6f1c29b7:startupdate[FriNov0215:33:57CST2018];parent:org.springframework.context.annotation.AnnotationConfigApplicationContext@63355449如果需要切换到生产环境,只需要更改${spring.profiles.active}参数配置即可。如下所示:

spring.profiles.active=product同时生产环境上Nacos需要添加对应DataId的基础配置。例如,在生产环境下的Naocs添加了DataId为:nacos-config-product.yaml的配置:

DataID:nacos-config-product.yamlGroup:DEFAULT_GROUP配置格式:YAML配置内容:current.env:product-env启动测试程序,输出结果如下:

用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的Group或DataID的配置。Namespace的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。

在没有明确指定${spring.cloud.nacos.config.namespace}配置的情况下,默认使用的是Nacos上Public这个namespace。如果需要使用自定义的命名空间,可以通过以下配置来实现:

spring.cloud.nacos.config.namespace=b3404bc0-d7dc-4855-b519-570ed34b62d7NOTE该配置必须放在bootstrap.properties文件中。此外spring.cloud.nacos.config.namespace的值是namespace对应的id,id值可以在Nacos的控制台获取。并且在添加配置时注意不要选择其他的namespae,否则将会导致读取不到正确的配置。4.7.支持自定义Group的配置在没有明确指定${spring.cloud.nacos.config.group}配置的情况下,默认使用的是DEFAULT_GROUP。如果需要自定义自己的Group,可以通过以下配置来实现:

spring.application.name=opensource-service-providerspring.cloud.nacos.config.server-addr=127.0.0.1:8848#configexternalconfiguration#1、DataId在默认的组DEFAULT_GROUP,不支持配置的动态刷新spring.cloud.nacos.config.ext-config[0].data-id=ext-config-common01.properties#2、DataId不在默认的组,不支持动态刷新spring.cloud.nacos.config.ext-config[1].data-id=ext-config-common02.propertiesspring.cloud.nacos.config.ext-config[1].group=GLOBALE_GROUP#3、DataId既不在默认的组,也支持动态刷新spring.cloud.nacos.config.ext-config[2].data-id=ext-config-common03.propertiesspring.cloud.nacos.config.ext-config[2].group=REFRESH_GROUPspring.cloud.nacos.config.ext-config[2].refresh=true可以看到:

通过自定义扩展的DataId配置,既可以解决多个应用间配置共享的问题,又可以支持一个应用有多个配置文件。

为了更加清晰的在多个应用间配置共享的DataId,你可以通过以下的方式来配置:

spring.cloud.nacos.config.shared-dataids=bootstrap-common.properties,all-common.propertiesspring.cloud.nacos.config.refreshable-dataids=bootstrap-common.properties可以看到:

当三种方式共同使用时,他们的一个优先级关系是:A

NacosConfig内部提供了一个Endpoint,对应的endpointid为nacos-config。

Endpoint暴露的json中包含了三种属性:

{ "NacosConfigProperties":{ "serverAddr":"127.0.0.1:8848", "encode":null, "group":"DEFAULT_GROUP", "prefix":null, "fileExtension":"properties", "timeout":3000, "endpoint":null, "namespace":null, "accessKey":null, "secretKey":null, "contextPath":null, "clusterName":null, "name":null, "sharedDataids":"base-common.properties,common.properties", "refreshableDataids":"common.properties", "extConfig":null }, "RefreshHistory":[{ "timestamp":"2019-07-2911:20:04", "dataId":"nacos-config-example.properties", "md5":"7d5d7f1051ff6571e2ec9f90887d9d91" }], "Sources":[{ "lastSynced":"2019-07-2911:19:04", "dataId":"common.properties" },{ "lastSynced":"2019-07-2911:19:04", "dataId":"base-common.properties" },{ "lastSynced":"2019-07-2911:19:04", "dataId":"nacos-config-example.properties" }]}4.11.完全关闭NacosConfig的自动化配置通过设置spring.cloud.nacos.config.enabled=false来完全关闭SpringCloudNacosConfig

更多关于NacosConfigStarter的配置项如下所示:

如果要在您的项目中引入Sentinel,使用groupID为com.alibaba.cloud和artifactID为spring-cloud-starter-alibaba-sentinel的starter。

[source,yaml]com.alibaba.cloudspring-cloud-starter-alibaba-sentinel下面这个例子就是一个最简单的使用Sentinel的例子:

@SpringBootApplicationpublicclassApplication{publicstaticvoidmain(String[]args){SpringApplication.run(ServiceApplication.class,args);}}@RestControllerpublicclassTestController{@GetMapping(value="/hello")@SentinelResource("hello")publicStringhello(){return"HelloSentinel";}}@SentinelResource注解用来标识资源是否被限流、降级。上述例子上该注解的属性'hello'表示资源名。

@SpringBootApplicationpublicclassApplication{publicstaticvoidmain(String[]args){SpringApplication.run(ServiceApplication.class,args);}}@RestControllerpublicclassTestController{@GetMapping("/mono")@SentinelResource("hello")publicMonomono(){ returnMono.just("simplestring") .transform(newSentinelReactorTransformer<>("otherResourceName"));}}Sentinel控制台Sentinel控制台提供一个轻量级的控制台,它提供机器发现、单机资源实时监控、集群资源汇总,以及规则管理的功能。您只需要对应用进行简单的配置,就可以使用这些功能。

注意:集群资源汇总仅支持500台以下的应用集群,有大概1-2秒的延时。

Figure3.SentinelDashboard

开启该功能需要3个步骤:

您也可以从最新版本的源码自行构建Sentinel控制台:

Sentinel控制台是一个标准的SpringBoot应用,以SpringBoot的方式运行jar包即可。

java-Dserver.port=8080-Dcsp.sentinel.dashboard.server=localhost:8080-Dproject.name=sentinel-dashboard-jarsentinel-dashboard.jar如若8080端口冲突,可使用-Dserver.port=新端口进行设置。

application.yml

spring:cloud:sentinel:transport:port:8719dashboard:localhost:8080这里的spring.cloud.sentinel.transport.port端口配置会在应用对应的机器上启动一个HttpServer,该Server会与Sentinel控制台做交互。比如Sentinel控制台添加了1个限流规则,会把规则数据push给这个HttpServer接收,HttpServer再将规则注册到Sentinel中。

org.springframework.cloudspring-cloud-starter-openfeign这是一个FeignClient的简单使用示例:

SpringCloudAlibabaSentinel支持对RestTemplate的服务调用使用Sentinel进行保护,在构造RestTemplatebean的时候需要加上@SentinelRestTemplate注解。

@Bean@SentinelRestTemplate(blockHandler="handleException",blockHandlerClass=ExceptionUtil.class)publicRestTemplaterestTemplate(){returnnewRestTemplate();}@SentinelRestTemplate注解的属性支持限流(blockHandler,blockHandlerClass)和降级(fallback,fallbackClass)的处理。

其中blockHandler或fallback属性对应的方法必须是对应blockHandlerClass或fallbackClass属性中的静态方法。

publicclassExceptionUtil{publicstaticClientHttpResponsehandleException(HttpRequestrequest,byte[]body,ClientHttpRequestExecutionexecution,BlockExceptionexception){...}}NOTE应用启动的时候会检查@SentinelRestTemplate注解对应的限流或降级方法是否存在,如不存在会抛出异常@SentinelRestTemplate注解的限流(blockHandler,blockHandlerClass)和降级(fallback,fallbackClass)属性不强制填写。

当使用RestTemplate调用被Sentinel熔断后,会返回RestTemplaterequestblockbysentinel信息,或者也可以编写对应的方法自行处理返回信息。这里提供了SentinelClientHttpResponse用于构造返回信息。

SentinelRestTemplate限流的资源规则提供两种粒度:

SentinelProperties内部提供了TreeMap类型的datasource属性用于配置数据源信息。

比如配置4个数据源:

每种数据源都有两个共同的配置项:data-type、converter-class以及rule-type。

data-type配置项表示Converter类型,SpringCloudAlibabaSentinel默认提供两种内置的值,分别是json和xml(不填默认是json)。如果不想使用内置的json或xml这两种Converter,可以填写custom表示自定义Converter,然后再配置converter-class配置项,该配置项需要写类的全路径名(比如spring.cloud.sentinel.datasource.ds1.file.converter-class=org.springframework.cloud.alibaba.cloud.examples.JsonFlowRuleListConverter)。

rule-type配置表示该数据源中的规则属于哪种类型的规则(flow,degrade,authority,system,param-flow,gw-flow,gw-api-group)。

若想跟SentinelStarter配合使用,需要加上spring-cloud-alibaba-sentinel-gateway依赖,同时需要添加spring-cloud-starter-gateway依赖来让spring-cloud-alibaba-sentinel-gateway模块里的SpringCloudGateway自动化配置类生效:

com.alibaba.cloudspring-cloud-starter-alibaba-sentinelcom.alibaba.cloudspring-cloud-alibaba-sentinel-gatewayorg.springframework.cloudspring-cloud-starter-gateway5.7.Sentinel对外暴露的EndpointSentinel内部提供了一个Endpoint,对应的endpointid为sentinel。

Endpoint暴露的json中包含了多种属性:

SpringCloudAlibabaSentinel提供了这些配置选项

具有以下特点:

解压后的目录结构如下:

apache-rocketmq├──LICENSE├──NOTICE├──README.md├──benchmark├──bin├──conf└──libnohupshbin/mqnamesrv&tail-f~/logs/rocketmqlogs/namesrv.lognohupshbin/mqbroker-nlocalhost:9876&tail-f~/logs/rocketmqlogs/broker.log发送消息:

shbin/tools.shorg.apache.rocketmq.example.quickstart.Producer发送成功后显示:SendResult[sendStatus=SEND_OK,msgId=…

接收消息:

shbin/tools.shorg.apache.rocketmq.example.quickstart.Consumer接收成功后显示:ConsumeMessageThread_%dReceiveNewMessages:[MessageExt…

shbin/mqshutdownbrokershbin/mqshutdownnamesrv6.3.SpringCloudStream介绍SpringCloudStream是一个用于构建基于消息的微服务应用框架。它基于SpringBoot来创建具有生产级别的单机Spring应用,并且使用SpringIntegration与Broker进行连接。

SpringCloudStream提供了消息中间件配置的统一抽象,推出了publish-subscribe、consumergroups、partition这些统一的概念。

SpringCloudStream内部有两个概念:Binder和Binding。

比如Kafka的实现KafkaMessageChannelBinder,RabbitMQ的实现RabbitMessageChannelBinder以及RocketMQ的实现RocketMQMessageChannelBinder。

Binding在消息中间件与应用程序提供的Provider和Consumer之间提供了一个桥梁,实现了开发者只需使用应用程序的Provider或Consumer生产或消费数据即可,屏蔽了开发者与底层消息中间件的接触。

Figure4.SpringCloudStream

使用SpringCloudStream完成一段简单的消息发送和消息接收代码:

SpringCloudStream底层基于这段代码去做了各种抽象。

如果要在您的项目中引入RocketMQBinder,需要引入如下maven依赖:

com.alibaba.cloudspring-cloud-stream-binder-rocketmq或者可以使用SpringCloudStreamRocketMQStarter:

com.alibaba.cloudspring-cloud-starter-stream-rocketmq6.5.SpringCloudAlibabaRocketMQBinder实现这是SpringCloudStreamRocketMQBinder的实现架构:

Figure5.SCSRocketMQBinder

MessageBuilderbuilder=MessageBuilder.withPayload(msg).setHeader(RocketMQHeaders.TAGS,"binder").setHeader(RocketMQHeaders.KEYS,"my-key");Messagemessage=builder.build();output().send(message);或者使用StreamBridge

Default:127.0.0.1:9876.

spring.cloud.stream.rocketmq.binder.access-key阿里云账号AccessKey。

Default:null.

spring.cloud.stream.rocketmq.binder.secret-key阿里云账号SecretKey。

spring.cloud.stream.rocketmq.binder.enable-msg-trace是否为Producer和Consumer开启消息轨迹功能

Default:true.

spring.cloud.stream.rocketmq.binder.customized-trace-topic消息轨迹开启后存储的topic名称。

Default:RMQ_SYS_TRACE_TOPIC.

enable是否启用Consumer。

默认值:true.

subscriptionConsumer基于TAGS订阅,多个tag以||分割。更多见com.alibaba.cloud.stream.binder.rocketmq.properties.RocketMQConsumerProperties.subscription

默认值:empty.

messageModelConsumer消费模式。如果想让每一个的订阅者都能接收到消息,可以使用广播模式。更多见org.apache.rocketmq.common.protocol.heartbeat.MessageModel

默认值:CLUSTERING.

consumeFromWhereConsumer从哪里开始消费。更多见org.apache.rocketmq.common.consumer.ConsumeFromWhere

默认值:CONSUME_FROM_LAST_OFFSET.

orderly是否同步消费消息模式

默认值:false.

delayLevelWhenNextConsume异步消费消息模式下消费失败重试策略:

默认值:1000.

其他更多参数见com.alibaba.cloud.stream.binder.rocketmq.properties.RocketMQConsumerProperties.Push

pullThreadNums消费时拉取的线程数

默认值:20.

pollTimeoutMillis拉取时的超时毫秒数

默认值:1000*5.

其他更多参数见com.alibaba.cloud.stream.binder.rocketmq.properties.RocketMQConsumerProperties.Pull.

enable是否启用Producer。

groupProducergroupname。

maxMessageSize消息发送的最大字节数。

默认值:8249344.

producerType消息生产者类型,普通或者事务。更多见com.alibaba.cloud.stream.binder.rocketmq.properties.RocketMQProducerProperties.ProducerType.

默认值:Normal.

transactionListener事务消息监听器的beanName,在producerType=Trans时才有效;必须是实现org.apache.rocketmq.client.producer.TransactionListener接口的SpringBean。

sendType消息发送类型(同步、异步、单向)。更多见com.alibaba.cloud.stream.binder.rocketmq.properties.RocketMQProducerProperties.SendType.

默认值:Sync.

sendCallBack消息发送后回调函数的beanName,在sendType=Async时才有效;必须是实现org.apache.rocketmq.client.producer.SendCallback接口的SpringBean。

vipChannelEnabled是否在VipChannel上发送消息。

默认值:3000.

compressMessageBodyThreshold消息体压缩阀值(当消息体超过4k的时候会被压缩)。

默认值:4096.

retryTimesWhenSendFailed在同步发送消息的模式下,消息发送失败的重试次数。

默认值:2.

retryTimesWhenSendAsyncFailed在异步发送消息的模式下,消息发送失败的重试次数。

retryAnotherBroker消息发送失败的情况下是否重试其它的broker。

使用阿里云MQ服务需要配置AccessKey、SecretKey以及云上的NameServer地址。

如果要在您的项目中引入ANS,使用groupID为com.alibaba.cloud和artifactID为spring-cloud-starter-alicloud-ans的starter。

com.alibaba.cloudspring-cloud-starter-alicloud-ans7.2.使用ANS进行服务注册当客户端引入了SpringCloudAliCloudANSStarter以后,服务的元数据会被自动注册到注册中心,比如IP、端口、权重等信息。客户端会与服务端保持心跳,来证明自己可以正常提供服务。

以下是一个简单的应用示例。

@SpringBootApplication@EnableDiscoveryClient@RestControllerpublicclassProviderApplication{@RequestMapping("/")publicStringhome(){return"Helloworld";}publicstaticvoidmain(String[]args){SpringApplication.run(ProviderApplication.class,args);}}既然服务会被注册到注册中心,那么肯定需要配置注册中心的地址,在application.properties中,还需要配置上以下地址。

#应用名会被作为服务名称使用,因此会必选spring.application.name=ans-providerserver.port=18081#以下就是注册中心的IP和端口配置spring.cloud.alicloud.ans.server-list=127.0.0.1spring.cloud.alicloud.ans.server-port=8080NOTE此时没有启动注册中心,启动应用会报错,因此在应用启动之前,应当首先启动注册中心。7.3.启动注册中心ANS使用的注册中心有两种,一种是完全免费的轻量版配置中心,主要用于开发和本地调试,一种是云上注册中心,ANS依托于阿里云EDAS产品提供服务注册的功能。通常情况下,可以使用轻量版配置中心作为开发和测试环境,使用云上的EDAS作为灰度和生产环境。

使用云上注册中心,可以省去服务端的维护工作,同时稳定性也会更有保障。当使用云上注册中心时,代码部分和使用轻量配置中心并没有区别,但是配置上会有一些区别。

以下是一个简单的使用云上配置中心的配置示例。

#应用名会被作为服务名称使用,因此是必选spring.application.name=ans-provider#端口配置自由配置即可server.port=18081#以下就是注册中心的IP和端口配置,因为默认就是127.0.0.1和8080,因此以下两行配置也可以省略spring.cloud.alicloud.ans.server-mode=EDASspring.cloud.alicloud.access-key=你的阿里云AKspring.cloud.alicloud.secret-key=你的阿里云SKspring.cloud.alicloud.edas.namespace=cn-xxxxxserver-mode的默认值为LOCAL,如果要使用云上注册中心,则需要更改为EDAS。

SpringCloudAliCloudACM是阿里云提供的商业版应用配置管理(ApplicationConfigurationManagement)产品在SpringCloud应用侧的客户端实现,且目前完全免费。

使用SpringCloudAliCloudACM,可基于SpringCloud的编程模型快速接入ACM配置管理功能。

如果要在您的项目中引入ACM,使用groupID为com.alibaba.cloud和artifactID为spring-cloud-starter-alicloud-acm的starter。

com.alibaba.cloudspring-cloud-starter-alicloud-acm8.2.使用ACM进行配置管理当客户端引入了SpringCloudAliCloudACMStarter以后,应用启动时会自动从配置管理的服务端获取配置信息,并注入到Spring的Environment中。

@SpringBootApplicationpublicclassProviderApplication{publicstaticvoidmain(String[]args){ConfigurableApplicationContextapplicationContext=SpringApplication.run(ProviderApplication.class,args);StringuserName=applicationContext.getEnvironment().getProperty("user.name");StringuserAge=applicationContext.getEnvironment().getProperty("user.age");System.err.println("username:"+userName+";age:"+userAge);}}在从配置中心服务端获取配置信息之前,还需要配置服务端的地址,在bootstrap.properties中,还需要配置以下信息。

#必选,应用名会被作为从服务端获取配置key的关键词组成部分spring.application.name=acm-configserver.port=18081#以下就是配置中心服务端的IP和端口配置spring.cloud.alicloud.acm.server-list=127.0.0.1spring.cloud.alicloud.acm.server-port=8080NOTE此时没有启动配置中心,启动应用会报错,因此在应用启动之前,应当首先启动配置中心。8.2.1.启动配置中心ACM使用的配置中心有两种,一种是本地运行的轻量版配置中心,主要用于开发和本地调试,一种是阿里云产品ACM。通常情况下,可以使用轻量版配置中心作为开发和测试环境,使用云上的ACM作为灰度和生产环境。

使用云上ACM,可以省去服务端的维护工作,同时稳定性也会更有保障。当使用云上配置中心时,代码部分和使用轻量配置中心并没有区别,但是配置上会有一些区别。

#应用名会被作为从服务端获取配置key的关键词组成部分,因此是必选spring.application.name=acm-config#端口配置自由配置即可server.port=18081#以下就是配置中心的IP和端口配置spring.cloud.alicloud.acm.server-mode=EDASspring.cloud.alicloud.access-key=你的阿里云AKspring.cloud.alicloud.secret-key=你的阿里云SKspring.cloud.alicloud.acm.endpoint=acm.aliyun.comspring.cloud.alicloud.acm.namespace=你的ACMnamespace,需要在ACM控制台查询NOTEEDAS提供应用托管服务,如果你将应用托管到EDAS,那么EDAS将会自动为你填充所有与业务无关的配置。8.2.2.在配置中心添加配置Group:DEFAULT_GROOUPDataId:acm-config.propertiesContent:user.name=jamesuser.age=18NOTEDataId的格式为{prefix}.{file-extension},prefix默认从配置spring.application.name中取值,file-extension默认的值为"properties"。8.2.3.启动应用验证启动这个Example,可以在控制台看到打印出的值正是我们在轻量版配置中心上预先配置的值。

username:james;age:188.3.更改配置文件扩展名spring-cloud-starter-alicloud-acm中DataId默认的文件扩展名是properties。除去properties格式之外,也支持yaml格式。支持通过spring.cloud.alicloud.acm.file-extension来配置文件的扩展名,yaml格式可以配置成yaml或yml。

spring-cloud-starter-alicloud-acm默认支持配置的动态更新,当您在配置中心修改配置的内容时,会发布Spring中的RefreshEvent事件。带有@RefreshScope和@ConfigurationProperties注解的类会自动刷新。

spring-cloud-starter-alicloud-acm在加载配置的时候,首先会加载DataId为{spring.application.name}.{file-extension}的配置,当spring.profiles.active中配置有内容时,还会依次去加载spring.profile对应的内容,DataId的格式为{spring.application.name}-{profile}.{file-extension}的配置,且后者的优先级高于前者。

spring.profiles.active属于配置的元数据,所以也必须配置在bootstrap.properties或bootstrap.yaml中。比如可以在bootstrap.properties中增加如下内容。

spring.profiles.active={profile-name}Note:也可以通过JVM参数-Dspring.profiles.active=develop或者--spring.profiles.active=develop这类优先级更高的方式来配置,只需遵循SpringBoot规范即可。

在没有明确指定{spring.cloud.alicloud.acm.group}配置的情况下,默认使用的是DEFAULT_GROUP。如果需要自定义自己的Group,可以通过以下配置来实现:

spring.cloud.alicloud.acm.group=DEVELOP_GROUPNOTE该配置必须放在bootstrap.properties文件中。并且在添加配置时Group的值要和spring.cloud.alicloud.acm.group的配置值一致。8.8.共享配置ACM提供了一种多个应用之间共享配置中心的同一个配置的推荐方式,供多个应用共享一些配置时使用,您在使用的时候需要添加在bootstrap中添加一个配置项spring.application.group。

spring.application.group=company.department.team这时应用在获取上文提到的自身所独有的配置之前,会先依次从这些DataId去获取,分别是company:application.properties,company.department:application.properties,company.department.team:application.properties。然后,还会从{spring.application.group}:{spring.application.name}.{file-extension}中获取,越往后优先级越高,最高的仍然是应用自身所独有的配置。

OSS(ObjectStorageService)是阿里云的一款对象存储服务产品,SpringCloudAliCloudOSS提供了SpringCloud规范下商业版的对象存储服务,提供简单易用的API,并且支持与Spring框架中Resource的整合。

如果要在您的项目中引入OSS,使用groupID为org.springframework.cloud和artifactID为spring-cloud-starter-alicloud-oss的starter。

com.alibaba.cloudspring-cloud-starter-alicloud-oss9.2.如何使用OSSAPI9.2.1.配置OSS使用SpringCloudAliCloudOSS之前,需要在application.properties中加入以下配置。

SpringCloudAlicloudOSS中的OSSAPI基于阿里云官方OSSSDK提供,具备上传、下载、查看等所有对象存储类操作API。

一个简单的使用OSSAPI的应用如下。

SpringCloudAliCloudOSS整合了Spring框架的Resource规范,可以让用户很方便的引用OSS的资源。

一个简单的使用Resource的例子如下。

除了基本的配置项以外,SpringCloudAliCloudOSS还支持很多额外的配置,也是在application.properties文件中。

以下是一些简单的示例。

SchedulerX(分布式任务调度)是隶属于阿里云EDAS产品的组件,SpringCloudAliCloudSchedulerX提供了在SpringCloud的配置规范下,分布式任务调度的功能支持。SchedulerX可提供秒级、精准、高可靠、高可用的定时任务调度服务,并支持多种类型的任务调度,如简单单机任务、简单多机任务、脚本任务以及网格任务。

如果要在您的项目中引入SchedulerX,使用groupID为com.alibaba.cloud和artifactID为spring-cloud-starter-alicloud-schedulerX的starter。

com.alibaba.cloudspring-cloud-starter-alicloud-schedulerX10.2.启动SchedulerX任务调度当客户端引入了SpringCloudAliCloudSchedulerXStarter以后,只需要进行一些简单的配置,就可以自动初始化SchedulerX的任务调度服务。

@SpringBootApplicationpublicclassScxApplication{publicstaticvoidmain(String[]args){SpringApplication.run(ScxApplication.class,args);}}在application.properties中,需要加上以下配置。

简单任务是最常用的任务类型,只需要实现ScxSimpleJobProcessor接口即可。

以下是一个简单的单机类型任务示例。

Job分组:测试——***-*-*-****Job处理接口:org.springframework.cloud.alibaba.cloud.examples.SimpleTask类型:简单Job单机版定时表达式:默认选项——0****Job描述:无自定义参数:无以上任务类型选择了"简单Job单机版",并且制定了Cron表达式为"0****",这意味着,每过一分钟,任务将会被执行且只执行一次。

以上使用的都是SchedulerX的"测试"区域,主要用于本地调试和测试。

在生产级别,除了上面的group-id和namespace以外,还需要一些额外的配置,如下所示。

server.port=18033#其中cn-test是SchedulerX的测试区域spring.cloud.alicloud.scx.group-id=***spring.cloud.alicloud.edas.namespace=***#当应用运行在EDAS上时,以下配置不需要手动配置。spring.cloud.alicloud.access-key=***spring.cloud.alicloud.secret-key=***#以下配置不是必须的,请参考SchedulerX文档spring.cloud.alicloud.scx.domain-name=***其中group-id与之前的获取方式一样,namespace则是从EDAS控制台左侧"命名空间"列表中获取命名空间ID。

短信服务(ShortMessageService)是阿里云为用户提供的一种通信服务的能力。SpringCloudAliCloudSMS实现了与SMS的简单集成,提供更为简单易用的API,可以基于SpringCloudAlibabaSMS来快速的接入阿里云的SMS服务。

如果要在您的项目中引入SMS,使用groupID为com.alibaba.cloud和artifactID为spring-cloud-starter-alicloud-sms的starter。

com.alibaba.cloudspring-cloud-starter-alicloud-sms11.2.如何使用SMSAPI11.2.1.配置SMS使用SpringCloudAliCloudSMS之前,需要在application.properties中加入以下配置。

SpringCloudAlicloudSMS中的SMSAPI基于阿里云官方SMSSDK,提供具备单个短信发送、多个短信批量发送、短信查询、短信消息(短信回执消息和上行短信消息)类型操作API。

一个简单的使用SMSAPI发送短信的应用如下。

SpringCloudAlicloudSMS封装的API接口为了降低学习的成本,尽量保持和官网提供的API以及Example保持一致。

参考以下的Example,来快速开发一个具有批量短信发送的功能。在Controller中或者新建一个Controler新增如下代码:

参考以下的Example,可以快速开发根据某个指定的号码查询短信历史发送状态。在Controller中或者新建一个Controler新增如下代码:

1、在application.properties配置文件中(也可以是application.yaml)配置SmsReport的队列名称。

application.properties

spring.cloud.alicloud.sms.report-queue-name=Alicom-Queue-********-SmsReport2、实现SmsReportMessageListener接口,并初始化一个SpringBean。

通过订阅SmsUp上行短信消息,可以获知终端用户回复短信的内容。这些工作也已经被SpringCloudAliCloudSMS封装好了。你只需要完成以下两步即可。

spring.cloud.alicloud.sms.up-queue-name=Alicom-Queue-********-SmsUp2、实现SmsUpMessageListener接口,并初始化一个SpringBean。

非SpringCloud应用,统称异构微服务。比如你的遗留项目,或者非JVM应用。

原因有两点:

既然没有,索性自己写了。

我准备了一个NodeJS编写的简单微服务。

示例:

至于断路器,正常为你的SpringCloud微服务整合Sentinel或者Hystirx、Resilience4J即可。

由于AlibabaSidecar基于SpringCloudGateway,而网关自带转发能力。

而SpringCloudGateway是整合了Ribbon的,所以实现了负载均衡;SpringCloudGateway还可以整合Sentinel或者Hystirx、Resilience4J,所以也带有了断路器。

AlibabaSidecar的设计和Sidecar基本一致,优缺点和Sidecar的优缺点也是一样的。

优点:

缺点:

跟JVM编译部署方式相比,GraalVM具有以下特点:

从上述对比可发现,最新支持SpringBoot3.0基于GraalVM的SpringCloudAlibaba应用会在启动速度、运行时内存占用和应用包大小方面得到大幅度降低,例如,其中服务注册消费应用启动速度提升了近10倍,运行时内存占用比原来降低了近乎2/3,效果非常明显。这给云原生时代,托管在云上的应用带来了显著优势,让其可以更快的进行弹性扩缩容以及降低企业整体用云成本!

要使用NativeBuildTools构建原生镜像,需要在首先在机器上安装GraalVM发行版。您可以在LibericaNativeImageKit页面上手动下载它,也可以使用像SDKMAN!这样的下载管理器。本文演示环境为MacOS,如果是Windows可参考相应文档进行操作。执行以下命令安装GraalVM环境:

sdkinstalljava22.3.r17-niksdkusejava22.3.r17-nik通过检查java-version的输出来验证是否配置了正确的版本:

$java-versionopenjdkversion"17.0.5"2022-10-18LTSOpenJDKRuntimeEnvironmentGraalVM22.3.0(build17.0.5+8-LTS)OpenJDK64-BitServerVMGraalVM22.3.0(build17.0.5+8-LTS,mixedmode)13.2.3.生成hint文件通过以下命令生成应用中反射、序列化和动态代理所需的hint配置文件:

mvn-Pnativespring-boot:run之后我们的example应用会启动,我们需要尽可能完整的测试一遍example的所有功能,保证应用的大部分代码都被测试用例覆盖,这样才能确保完整生成应用运行过程中的所有必须的动态属性。运行完所有测试用例后,我们发现resource/META-INF/native-image目录下会生成以下一些hint文件:

以上步骤一切准备就绪后,通过以下命令来构建原生镜像:

mvn-Pnativenative:compile成功执行后,我们在/target目录可以看到我们生成的可执行文件。

与普通可执行文件无异,通过target/nacos-config-2.4.x-example启动本example,可以观察到类似如下的输出:

Physicalfootprint:59.2MPhysicalfootprint(peak):59.2M通过普通的方式启动Java应用的内存占用情况如下:

Physicalfootprint:214.0MPhysicalfootprint(peak):256.8M可以看到,通过原生镜像启动Java应用后,内存占用大大减少。应用启动后各项功能与通过jar启动无异。

THE END
1.azcommunicationsmsMicrosoftLearn此参考是 Azure CLI(版本 2.59.0 或更高版本)的通信扩展的一部分。 该扩展将在首次运行az communication sms命令时自动安装。详细了解扩展。 用于管理通信服务资源的短信的命令。 命令 展开表 名称说明类型Status az communication sms send 将发送方电话号码中的短信发送到接收方电话号码(s)。 https://docs.microsoft.com/zh-cn/cli/azure/communication/sms
2.短信发送API,即时通讯的利器APISpace的通知短信API、验证码短信API,支持发送有变量和无变量的短信,支持三大运营商,虚拟运营商短信发送,电信级运维保障,独享专用通道。发送短信之前,需要联系工作人员提交签名和模板审核。 image.png 代码接入示例: import requestsdef send_sms(phone_number, message): https://blog.itpub.net/70032578/viewspace-3057154/
3.kafkaproducer配置影响性能吗问答影响:buffer.memory决定了生产者在等待发送时缓存的消息数量。如果设置得太小,可能导致消息丢失或延迟增加;如果设置得太大,会占用过多内存,可能导致频繁的垃圾回收。 建议值:通常建议根据业务需求和可用内存来设置,例如,对于高吞吐量的场景,可以设置为系统总内存的40%-60%。 批量大小 (batch.size) 影响:batch.sizehttps://www.yisu.com/ask/91214615.html
4.调用SendBatchSms批量发送短信短信服务(SMS)SendBatchSms - 批量发送短信 更新时间:2024-11-12 13:41:31 产品详情 调用此接口可以给不同的手机号码,发送不同签名、同一个模板(可以是不同模板变量)的短信。 接口说明 基本信息 本接口主要用于向多个手机号发送短信,支持发送不同签名、同一模板、不同模板变量的短信,单次调用最多支持 100 个手机号。 https://help.aliyun.com/document_detail/419274.html
5.MSGSMSontheAppStoreOpen the Mac App Store to buy and download apps. MSG SMS17+ MS Group Designed for iPhone Free iPhone Screenshots Description An informational/advertising Bulk SMS sending application What’s New 18 Oct 2024 Version 1.1.6 Added HTTP API page https://apps.apple.com/cn/app/msg-sms/id6479350030?l=en-GB
6.调用SendBatchSms批量发送短信短信服务(SMS)SendBatchSms - 批量发送短信 更新时间: 产品详情 调用此接口可以给不同的手机号码,发送不同签名、同一个模板(可以是不同模板变量)的短信。 接口说明 基本信息 本接口主要用于向多个手机号发送短信,支持发送不同签名、同一模板、不同模板变量的短信,单次调用最多支持 100 个手机号。 http://help.pinpaidadao.com/?document_detail/419274.html
7.推荐文章:smsbomber——你的批量短信发送利器在数字通信时代,高效而精准的信息传递变得至关重要。今天,我们为您推荐一个名为sms-bomber的开源项目,它是一个简洁高效的Python脚本,能够实现批量短信的发送。通过简单的界面操作,您只需输入手机号码、短信内容及发送次数,即可一键完成大量短信的投递工作,为营销活动、通知推送等场景提供便利。 https://blog.csdn.net/gitblog_00038/article/details/139916018
8.批量发送多内容短信短信接收号码,多个号码之间以英文逗号分隔 是 String content 发送内容,长度不能超过1024字符 是 String senderId 发送号码,最大长度是32个字符 否 String orderId 自定义消息id,orderId 数量和手机号码数量需保持一致 否 String 请求URL: https://api.onbuka.com/v3/sendSms/batch https://www.onbuka.com/zh-cn/sms-api7/
9.vbsmsvb批量发送短信vb短信对接4082 超出同一手机号一天之内【5】条短信限制 4085 同一手机号验证码短信发送超出【5】条 请求示例: http://106.ihuyi.com/webservice/sms.php?method=Submit&account=APIID&password=APIKEY&mobile=手机号码&content=您的验证码是:1234。请不要把验证码泄露给其他人。 发送成功,手机可收到短信。 如遇到提交https://m.ihuyi.com/baike/1000189066622.html
10.Java批量发短信mob649e815574e6的技术博客3.3 发送短信 接下来,你可以调用SmsClient的sendBatchSms方法发送批量短信,并获取发送结果。以下是发送短信的代码示例: SmsResponseresponse=client.sendBatchSms(request); 1. 3.4 处理发送结果 最后,你可以根据发送结果进行相应的处理。以下是处理发送结果的代码示例: https://blog.51cto.com/u_16175438/6952164
11.网站调用阿里云短信接口给几千上万个手机号码批量发送短信具体来说,sendSms即短信发送接口,在一次请求中,最多可以向1000个手机号码发送同样内容的短信,手机号码之间使用英文逗号隔开。sendBatchSms即批量短信发送接口,在一次请求中,最多可以向100个手机号码分别发送短信,手机号码以JSON或数组形式提交。他们的区别就在于发送接口需要是一样的内容,而批量可以发送同一个模板的不https://www.chuangluo.com/news_627.html
12.JAVA实现多线程处理批量发送短信APP推送二进制三logger.info(" result of filter target customers=>{}", smsDataMap);/*** ---2.批量发送消息--- * TODO://((-?)\d{1,11}\,?){1,n} n个线程分批发送*/if("0".equals(message.getType())){//短信发送sendBatch(smsDataMap.get("phone").toString(),message); }if("1".equals(https://www.cnblogs.com/lc1776/p/9167824.html
13.Springboot使用阿里云api批量发送短信阿里短信相关设置: sendBatchSms--4 组装请求对象并发送! sendBatchSms--5 到此,阿里云批量发送短信接口完成。在前端html中定义@click方法: 工资条发放 前端vue的js中方法如下: 调用接口方法https://www.jianshu.com/p/80368d0ac58e
14.使用阿里云的短信服务发送短信delphi阿里云短信(支持SendSms短信发送、SendBatchSms短信批量发送、QuerySendDetails查询短信发送记录),D7~XE10可用 delphi阿里云短信(支持SendSms短信、SendBatchSms短信批量、QuerySendDetails查询短信记录),D7~XE10可用 作者QQ:(648437169) 下载链接:https://download.csdn.net/download/zhimamaigua2/12694725 【delphihttps://www.pianshen.com/article/2887381205/
15.阿里发送短信封装类(AliyunSmsUtils.java亲测可用)如果需要在一次请求中分别向多个不同的手机号发送不同签名和模板内容短信,使用他的另一个接口SendBatchSms。这是他的批量发送接口当验证码签名和通用签名名称相同的时候,系统会优先默认使用通用签名发送短信。 立即下载 上传者: ybb_ymm 时间: 2023-06-16 Java基于腾讯云短信和阿里云短信整合的一个简单demo.zip https://www.iteye.com/resource/wumingdu1234-12154760
16.GitHubjackieonway/smsspringboot根据对应的短信服务商所需信息填写*/publicObjectsendBatchSms(inttype,Objectparams);/*** 批量发送模板短信* @param tempalteId 短信模板id* @param params 根据对应的短信服务商所需信息填写*/publicObjectsendBatchTemplateSms(StringtempalteId,Objectparams);/*** 异步发送模板短信* @param tempalteId 短信https://github.com/jackieonway/sms-spring-boot-project
17.阿里短信单发,批量发送如何用阿里小号发短信("dysmsapi.aliyuncs.com");request.setVersion("2017-05-25");request.setAction("SendBatchSms");request.putQueryParameter("RegionId","cn-hangzhou");request.putQueryParameter("PhoneNumberJson",mobile);request.putQueryParameter("SignNameJson",SignNameJson);request.putQueryParameter("TemplateCode",https://cloud.tencent.com/developer/article/2164128
18.yii2阿里云短信服务aliyundysms扩展//批量发送 $response = Yii::$app->aliyun->sendBatchSms( array("孙坤峰","孙坤峰"), // 短信签名 "SMS_76350132", // 短信模板编号 array("136***134","180***459"), // 短信接收者 array(array( // 短信模板中字段的值 "code"=>"12345", "product"=>"dsd" ),array( // 短信模板https://www.yiichina.com/extension/1505
19.eucp修改config/eucpsms.php文件内容 return["ym_sms_addr"=>"www.btom.cn:8080",/*接口地址,请联系销售获取*/"ym_sms_send_uri"=>"/inter/sendSingleSMS",/*发送单条短信接口*/"ym_sms_send_batch_uri"=>"/inter/sendBatchSMS",/*发送批次短信接口*/"ym_sms_send_batchonly_sms_uri"=>"/inter/sendhttps://gitee.com/Ardonfu/eucp-sms/
20.SendSmsVerifyCode发送验证码短信短信服务短信服务使用方可调用SendSmsVerifyCode接口,由短信服务生成验证码并下发验证码短信。 注意事项 发送验证码场景并非必须使用此API,也可使用SendSms和SendBatchSms,此接口的特点为验证码由短信服务生成 请求说明 请求方式:POST 请求地址:https://sms.volcengineapi.com?Action=SendSmsVerifyCode&Version=2020-01-01 https://www.volcengine.com/docs/6361/171579
21.普通短信发送文档中心使用POST 方式发送时,需要使用 urlencode 编码 。 为多个手机号码发送不同短信内容时,请参考批量短信发送为一个或多个手机号码发送变量短信内容时,请参考变量短信发送 发送接口 协议说明 协议类目说明 HTTP地址 http://IP:PORT/msg/HttpBatchSendSM HTTPS地址 https://IP:PORT/msg/HttpBatchSendSM 请求方式 POST,http://doc.lyxxjs.com/api/tag.html
22.C#使用短信服务实现发送短信功能2、开通短信服务 3、申请短信签名和短信模板 4、了解 SendSms 与 SendBatchSms API 注:如何注册、开通、申请本文不介绍 参考 SendSms API: https://help.aliyun.com/zh/sms/developer-reference/api-dysmsapi-2017-05-25-sendsms?spm=a2c4g.11186623.0.0.46c55ee7o7paJ3 http://www.360doc.com/content/24/0826/08/1339386_1132317523.shtml
23.com.aliyuncs.IAcsClient.getAcsResponse()方法的使用及代码示例toSendBatchSmsRequest()); } 代码示例来源:origin: cn.minsin/mutils-aliyun-sms /** * 发送短信给单个用户 * * @param model * @return * @throws ServerException * @throws ClientException * @throws MutilsErrorException */ public static SendSmsResponse sendSingleSms(AliyunSendSmsModel model) https://www.saoniuhuo.com/article/detail-228899.html
24.SpringBoot实现发送短信的示例代码java* 群发短信测试 * @Author: Sans * @CreateTime: 2019/4/2 11:23 */ @RequestMapping(value ="/sendBatchsmsTest",method = RequestMethod.GET) publicString sendBatchsmsTest(){ //群发短信API String url ="https://open.ucpaas.com/ol/sms/sendsms_batch"; https://www.jb51.net/article/160092.htm