eureka部署及openFeign的使用
一、Eureka Server 的安装与配置
1.创建SpringBoot项目
使用Spring Initializr创建项目,选择Spring Boot版本(如2.5.x)并添加依赖:
- Spring Web(构建Web应用)
- Eureka Server(服务端支持)
2.pom.xml添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
3.yum文件配置
eureka:
instance:
hostname: zjl.test.pc3
lease-renewal-interval-in-seconds: 5 # 心跳检测时间
lease-expiration-duration-in-seconds: 6 # 项目续约时间
prefer-ip-address: false #service-url为域名时,这里要配置为false
server:
enable-self-preservation: false #关闭自我保护机制,保证服务能及时踢出
client:
register-with-eureka: true # false 表示不向注册中心注册自己
fetch-registry: true # false 表示自己是注册中心,职责是维护服务实例,不去检索服务
service-url:
defaultZone: http://zjleureka:eurekapwd@zjl.test.pc1:8761/eureka,http://zjleureka:eurekapwd@zjl.test.pc2:8761/eureka,http://zjleureka:eurekapwd@zjl.test.pc3:8761/eureka
- eureka启动三个节点,三个节点互相注册,实现高可用。
- defaultZone 配置全部三个节点的信息
- hostname 为当前节点的hostname 与 defaultZone里的域名是一样的。
- prefer-ip-address 设置为false,因为defaultZone里使用的是域名而不是IP
- register-with-eureka: true 集群必须要设置为true 否则会出现unavilable-replicas 问题
- fetch-registry: true 集群必须要设置为true 否则会出现unavilable-replicas 问题
4.启动类配置
@SpringBootApplication @EnableEurekaServer public class ZjleurekaApplication { public static void main(String[] args) { SpringApplication.run(ZjleurekaApplication.class, args); } }
- 添加@EnableEurekaServer 配置
二、Eureka Client 配置
1.pom.xml添加客户端依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
- 这两个依赖是必须的
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<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>
- spring-cloud-dependencies 这个Mannagement可以统一管理引入的springCloud版本号
2.主启动类上开启Eureka客户端
@SpringBootApplication @EnableEurekaClient public class MsOrderServiceApplication { public static void main(String[] args) { SpringApplication.run(MsOrderServiceApplication.class, args); } }
- @EnableEurekaClient 启动eureka 客户端
3.yml文件配置
server:
port: 9002
spring:
application:
name: zjl-test-order-service
eureka:
client:
service-url:
defaultZone: http://zjleureka:eurekapwd@zjl.test.pc1:8761/eureka,http://zjleureka:eurekapwd@zjl.test.pc2:8761/eureka,http://zjleureka:eurekapwd@zjl.test.pc3:8761/eureka
- 配置项目名称
- 配置eureka集群,三个节点,并且添加用户名密码
4.查看Eureka面板是否注册成功
三、服务发现与调用
1.使用RestTemplate调用服务
1.1.启用负载均衡
@Configuration public class ZjlConfigRagions { @Bean @LoadBalanced public RestTemplate getRestTemplate() { return new RestTemplate(); } }
1.2.调用其他服务
@RequestMapping("doTest")
@ResponseBody
public String doTest() {
String url = "http://zjl-test-order-service/order/createOrder";
ResponseEntity<String> forEntity = restTemplate.getForEntity(url, String.class);
return JSON.toJSONString(forEntity);
}
- 可以通过服务名称的形式调用成功
2.使用openFeign调用服务
2.1.服务提供方
引入feign的jar包
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-openfeign-core</artifactId>
</dependency>
写RMI接口
@FeignClient(name = "zjl-test-order-service")
public interface OrderRMI {
/**
* 创建订单
*/
@RequestMapping(value = "/order/createOrder", method = RequestMethod.POST)
OrderVo createOrder(@RequestBody OrderParam orderParam);
}
2.1.服务调用方
引入Feign的相关jar包,包括服务提供方写的接口JAR包
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-openfeign-core</artifactId>
</dependency>
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-core</artifactId>
<version>11.8</version> <!-- 使用最新版本 -->
</dependency>
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-slf4j</artifactId>
<version>10.12</version> <!-- 使用最新版本,或者适合你项目的版本 -->
</dependency>
<dependency>
<groupId>com.zjl.test.order</groupId>
<artifactId>ms-order-interface</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
直接以本地方法的形式调用
@Controller
public class Test {
@Autowired
private OrderRMI orderRMI;
@RequestMapping("doTest")
@ResponseBody
public String doTest() {
OrderVo orderVo = orderRMI.createOrder(new OrderParam());
UUID uuid = UUID.randomUUID();
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return sdf.format(date) + "--" + uuid + JSON.toJSONString(orderVo);
}
}
整理自:https://blog.csdn.net/bjzhang75/article/details/146864172


浙公网安备 33010602011771号