**
标题将微服务技术栈
升级成 alibaba 微服务技术栈
**
**
为什么要升级?
现阶段:微服务技术栈 string cloud,底层使用Netflix,Netflix很多组件已经不更新了
现状:alibaba提供一套微服务解决方案,统称string cloud alibaba,目前持续更新汇总中,先天兼容阿里云的所有技术
介绍:Spring cloud alibaba 是 spring cloud子项目
Nacos入门
Nacos下载与安装
下载路径 https://nacos.io/zh-cn/docs/quick-start.html
如果是解压版解压即可
启动:startup.cmd -m standalone
运行效果
Nacos入门:服务提供者
目标:编写一个服务,并成功的注册到nacos中
创建父项目
<!-- 1 确定spring boot的版本-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
</parent>
<!--2 确定版本-->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<spring-cloud-release.version>Hoxton.SR3</spring-cloud-release.version>
<nacos.version>1.1.0</nacos.version>
<alibaba.cloud.version>2.2.1.RELEASE</alibaba.cloud.version>
</properties>
<!-- 3 锁定版本-->
<dependencyManagement>
<dependencies>
<!-- sprig cloud-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud-release.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--nacos -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>${nacos.version}</version>
</dependency>
<!--nacos cloud 发现 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>${alibaba.cloud.version}</version>
</dependency>
<!--nacos cloud 配置 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>${alibaba.cloud.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-sentinel -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
<version>${alibaba.cloud.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
创建提供者测试项目
- 创建项目
- 添加依赖
<dependencies>
<!-- web 启动类 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- nacos 客户端 -->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
</dependency>
<!-- nacos 服务发现 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
- 编写yml文件
server:
port: 8070
spring:
application:
name: service-provider #服务名
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848 #nacos服务地址
- 编写启动类
package com.cxxy.changgou4;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient //通用服务发现注解
public class TestNacosProviderApplication {
public static void main(String[] args) {
SpringApplication.run(TestNacosProviderApplication.class,args);
}
}
- 编写测试controller类
package com.cxxy.changgou4.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class EchoController {
@GetMapping("/echo/{str}")
public String echo(@PathVariable("str") String str) {
return " hello : " + str;
}
}
测试
http://localhost:8070/echo/123
Nacos入门:服务消费者
- 创建项目
- 添加依赖
- 创建yml(端口号、服务名)
#端口号
server:
port: 8071
spring:
application:
name: service-consumer #服务名
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848 #nacos服务地址
- 启动类
- 编写配置类(RestTemplate)
package com.czxy.changgou4.config;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
@Component
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
- 编写测试controller类
- 方案1:访问完整请求路径http://localhost:8070/echo/123
package com.czxy.changgou4.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
@RestController
@RequestMapping("/rest")
public class TestRestController {
@Resource
private RestTemplate restTemplate;
@GetMapping("/echo/{str}")
public String echo(@PathVariable("str") String str) {
// 方案1:访问完整路径
return restTemplate.getForObject("http://localhost:8070/echo/" + str, String.class);
}
}
- 方案2:通过服务名访问
*要求:通过服务名
访问,RestTemplate必须支持负载均衡
package com.czxy.changgou4.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
@RestController
@RequestMapping("/rest")
public class TestRestController {
@Resource
private RestTemplate restTemplate;
@GetMapping("/echo/{str}")
public String echo(@PathVariable("str") String str) {
// 方案1:访问完整路径
//return restTemplate.getForObject("http://localhost:8070/echo/" + str, String.class);
// 方案2:通过服务名访问
return restTemplate.getForObject("http://service-provider/echo/" + str, String.class);
}
}