spring-cloud-alibaba组件
- 服务的注册与发现:适配spring-cloud服务注册与发现标准,默认集成ribbon的支持
- 服务限流与降级,默认支持serlet,feigin.resttemplate,dobbo和rocketMQ限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级metrics监控
- 分布式配置管理,分布式配置中的外部配置,配置更改时自动刷新
- 消息驱动能力:基于spring-cloud-stream,为微服务应用构建消息驱动能力
- 分布式事物:使用@GlobalTransaction注解,高效并且对事物零侵入地解决分布式事物问题
- 阿里云对象存储
- 分布式任务调度
- 阿里云短信服务
nacos的注册与发现
nacos启动
-- 启动nacos,默认端口8848,
linux/mac: ./startup.sh -m standalone
-- nacos 账户密码
nacos = nacos
客户端
pom 配置
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<!--依赖版本定义-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>0.2.1.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
application.yml 配置文件
server:
port: 8050
spring:
application:
name: nacos-discovery-consumer
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
metadata:
name: lengleng
程序
//加上EnableDiscoveryClient
@EnableDiscoveryClient
@SpringBootApplication
public class NacosDiscoveryConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(NacosDiscoveryConsumerApplication.class, args);
}
@Bean
@LoadBalanced //实现负载均衡
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
@RestController
public class DemoController {
@Autowired
private RestTemplate restTemplate;
@Autowired
private LoadBalancerClient loadBalancerClient;
@GetMapping("/test")
public String test(String name) {
RibbonLoadBalancerClient.RibbonServer ribbonServer = (RibbonLoadBalancerClient.RibbonServer) loadBalancerClient.choose("nacos-discovery-provider");
NacosServer nacosServer = (NacosServer) ribbonServer.getServer();
System.out.println("-->" + nacosServer.getMetadata());
//远程调用
return restTemplate.getForObject( "http://nacos-discovery-provider/demo?name=" + name, String.class);
}
}
服务端
pom配置同上
application.yml配置
server:
port: 8051
spring:
application:
name: nacos-discovery-provider
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
metadata:
name: provider
程序
@EnableDiscoveryClient
@SpringBootApplication
public class NacosDiscoveryProviderApplication {
public static void main(String[] args) {
SpringApplication.run(NacosDiscoveryProviderApplication.class, args);
}
}
@RestController
public class DemoController {
@Value("${server.port}")
private Integer port;
@GetMapping("/demo")
public String demo(String name) {
return "hello " + name + port;
}
}
测试
curl http://nacos-discovery-provider/demo?name=xxx