文章目录
Spring Cloud介绍
(1)Spring cloud 是什么?
微服务是一种架构方式,最终肯定需要技术架构去实施。
微服务的实现方式很多,但是最火的莫过于Spring Cloud了
Spring Cloud是一种最火的微服务实现方式
Spring Cloud是Spring旗下的项目之一
官网地址:http://projects.spring.io/spring-cloud/
(2)Spring cloud为什么火?
- 后台硬 spring全家桶
- 技术强 spring团队
- 使用方便 springboot
Spring Cloud架构
(1)Spring Cloud 版本
1.0.0 整数编号
它的版本命名比较特殊,是以A到Z的为首字母的一些单词
(其实是伦敦地铁站的名字)组成
(2)Spring cloud 架构是怎样的?
- Eureka:注册中心 美[juˈriːkə]
- Zuul 或者 Gateway:服务网关
- Ribbon: 负 载 均 衡 美[ˈrɪbən]
- Feign:服务调用 美[feɪn]
- Hystrix或Resilience4j:熔断器 美[hɪst’rɪks] 美[rɪˈzɪliəns]
springcloud 发布的服务,有三个要素
一是提供者
二是消费者
三是注册中心
1、创建微服务工程
(1)创建工程规划
- 创建微服务父工程xxx-parent
- 用户服务工程demo01_provider_user_8001
- 服务消费工程demo02_consumer_user_81
(2)步骤
-
1 父工程xxx-parent
添加spring boot父坐标和管理其它组件的依赖 -
2 用户服务工程demo01_provider_user_8001
整合mybatis查询数据库中用户数据;提供查询用户服务 -
3 服务消费工程demo02_consumer_user_81
利用查询用户服务获取用户数据并输出到浏览器
2、搭建配置服务(provider)工程
(1)demo01_provider_user_8001
可以访问http://localhost:8001/user/8输出用户数据
(2)实现步骤
-
- 添加启动器依赖(web)
-
- 修改配置文件中的参数
application.properties
- 修改配置文件中的参数
# service name
spring.application.name=demo01_provider_user_8001
# service port
server.port=8001
(3)测试代码UserController
@RestController
@RequestMapping("/users")
public class UserController {
@RequestMapping(path = "/{id}",method = {RequestMethod.GET})
public Object get(@PathVariable long id){
User user=new User();
user.setId(id);
user.setUsername("jack"+id);
user.setPassword("123456");
return user;//返回json
}
}
3、搭建配置消费(consumer)工程
(1)访问http://localhost:81/consumer/?
使用RestTemplate获取http://localhost:8001/user/1的数据
(2)实现步骤
-
- 添加启动器依赖;
-
- 创建启动引导类(注册RestTemplate)和配置文件;
application.properties
- 创建启动引导类(注册RestTemplate)和配置文件;
spring.application.name=demo02_consumer_user_81
server.port=81
(3)测试
@RestController
@RequestMapping("/consumer")
@Slf4j
public class CustomerController {
@Autowired
//当前使用RestTemplate调用demo01的数据
RestTemplate rt;
@Autowired
DiscoveryClient discoveryClient;
//需要在启动类创建当前对象
//自动去获取
@RequestMapping(path = "/{id}",method = {RequestMethod.GET})
public Object get(@PathVariable long id){
//获取端口
List<ServiceInstance> list=discoveryClient.getInstances("demo01_provider_user_8001");
//表示运行中的服务对象
ServiceInstance serviceInstance=list.get(0);
String host=serviceInstance.getHost();
int port= serviceInstance.getPort();
log.info("host"+host);
log.info("port"+port);
//消费工程,只是调用其他服务来获取想要的数据
String url="http://"+host+":"+port+"/users/11";//参1地址
//String url="http://localhost:8001/users/11";
String json=rt.getForObject(url,String.class);//参2地址,数据要转换成什么类型
return json;
}
}
Eureka注册中心说明
(1)Eureka是什么?
SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。
(2)Eureka有什么功能 ?
主要功能是
- 进行服务管理
- 定期检查服务状态
- 返回服务地址列表。
4、搭建eureka-server工程
(1)Eureka是服务注册中心,只做服务注册;
demo03_eureka_server_10086
自身并不提供服务也不消费服务。
可以搭建web工程使用Eureka,可以使用Spring Boot方式搭建。
(2)搭建步骤
- 创建工程;
- 添加启动器依赖;
pom.xml
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
- 修改配置文件(端口,应用名称…);
application.properties
spring.application.name=demo03_register_center_eureka_10086
server.port=10086
# eureka 服务地址,如果是集群的话;需要指定其它集群eureka地址
eureka.client.service-url.defaultZone=http://127.0.0.1:10086/eureka
#不注册自己
eureka.client.register-with-eureka=false
#不拉取服务
eureka.client.fetch-registry=false
- 编写启动引导类(添加Eureka的服务注解)和配置文件;
@SpringBootApplication
@EnableEurekaServer
public class Demo03RegisterCenterEureka10086Application {
public static void main(String[] args) {
SpringApplication.run(Demo03RegisterCenterEureka10086Application.class, args);
}
}
- 启动测试
5、pom.xml
(1)父
<groupId>com.smp</groupId>
<artifactId>micro_service_spring_cloud_parent</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>demo01_provider_user_8001</module>
<module>demo02_consumer_user_81</module>
<module>demo03_register_center_eureka_10086</module>
</modules>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>2020.0.0-M5</spring-cloud.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.16</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
</repository>
</repositories>
(2)子
<parent>
<groupId>com.smp</groupId>
<artifactId>micro_service_spring_cloud_parent</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
application.properties
eureka.client.service-url.defaultZone=http://127.0.0.1:10086/eureka
main
@SpringBootApplication
@EnableEurekaClient
public class Demo02ConsumerUser81Application