1.简介
springcloud简介
spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等。
Feign简介
Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单。使用Feign,只需要创建一个接口并注解。它具有可插拔的注解特性,可使用Feign 注解和JAX-RS注解。Feign支持可插拔的编码器和解码器。Feign默认集成了Ribbon,并和Eureka结合,默认实现了负载均衡的效果
eureka简介
eureka是一个springcloud中的一个组件,属于服务注册和发现模块,类似的注册中心还有:zookeeper
consul
。
开发工具:idea
2.创建注册中心
使用idea创建springcloud项目
创建项目后,pom.xml依赖如图
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.cloud</groupId>
<artifactId>eurekaserver</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>eurekaserver</name>
<description>springcloud eureka-server</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR2</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</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>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
在配置文件中增加配置信息,这里我使用的是yml,如果有用properties的可以以.分隔
server:
port: 8761
eureka:
server:
enableSelfPreservation: false
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
在启动类上加上注解@EnableEurekaServer
这时候,一个注册中心已经搭建好了.启动服务.访问localhost:8761
3.创建客户端-服务提供者(eureka client)
创建过程和上面类似的.
创建成功后,在启动类上加上注解@EnableEurekaClient@EnableFeignClients,以使用fegin
配置文件:
#中心地址
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
#客户端端口
server:
port: 8762
#客户端名称----在注册中心展示的名称
spring:
application:
name: service-client
重复上述操作.再创建一个项目!!!!
步骤完全一致.配置文件中port端口修改为8764,客户端名称修改一下,不能出现重名的
#中心地址
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
#客户端端口
server:
port: 8764
#客户端名称----在注册中心展示的名称
spring:
application:
name: service-ribbon
目前我们已经创建了三个项目:1server端口8761 2.client端口8762 3.client端口8764
下一步在端口为8762的模块中创建一个接口
写一个controller来调用接口
下一步在端口为8764的模块中创建一个controller
截图中@RequestMapping("/hello"),要和8762中的接口上的@RequestMapping("/hello")地址一致
完成搭建后,启动服务
此时注册中心application会出现刚才创建的两个服务,8762和8764
下一步,访问8762地址的接口
此时会看到调用8762中的接口,会通过fegin调用8764的内容
如果想达到负载均衡的效果,只需要在把8764的端口改为8765(注意,8764服务不要停掉,要在启动一个8765服务)
此时在访问localhost:8762/hello
会返回两种结果:
hello,zyy!8764
hello,zyy!8765
因为fegin默认集成了Ribbon,所以达到了负载均衡的效果.如果只使用Ribbon来调用服务,可以使用RestTemplate来调用
在启动类中加入
/**
*LoadBalanced注解用于开启负载均衡
*/
@Bean
@LoadBalanced
RestTemplate restTemplate(){
return new RestTemplate();
}
即可达到负载均衡的效果