前言
本文通过 springboot 创建两个项目:provider、consumer,并注册至 Eureka 注册中心,通过Feign实现服务间调用。
一、Eureka 是什么?
Eureka 是 Netflix 开发的服务发现框架,本身是一个基于 REST 的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。
Eureka 包含两个组件:Eureka Server 和 Eureka Client。
Eureka Server 提供服务注册服务,各个节点启动后,会在 Eureka Server 中进行注册,这样 EurekaServer 中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。
Eureka Client 是一个java客户端,用于简化与 Eureka Server 的交互,客户端同时也就是一个内置的、使用轮询(round-robin) 负载算法的负载均衡器。
不过 Eureka 的 GitHub Wiki 显示 2.0 版本的开源工作不再继续了:https://github.com/Netflix/eureka/wiki
大家可以考虑使用 Nacos 替代。见:SpringBoot 集成 Nacos 及 Feign,就是这么简单
二、Feign 是什么?
Feign 是一个声明式 Web 服务客户端。它使编写 Web 服务客户端变得更加容易。只需要创建一个接口并添加注解就可以进行微服务的调用。
三、集成步骤
1.创建 Eureka 服务注册中心
创建 SpringBoot 项目的方法见:[使用Idea创建 SpringBoot 项目]
(1).添加依赖
pom.xml 文件中添加以下依赖:
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2021.0.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
注意:SpringBoot 和 SpringCloud 版本要对应,见:SpringBoot 、SpringCloud 版本选择
(2).添加配置
application.yml 文件中添加以下配置:
server:
port: 8080 #服务注册中心端口
eureka:
instance:
hostname: 127.0.0.1 #服务注册中心IP地址
client:
registerWithEureka: false #是否向服务注册中心注册自己
fetchRegistry: false #是否检索服务
serviceUrl: #服务注册中心链接,指定服务注册中心的位置
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
(3).启动类添加注解
启动类添加注解 @EnableEurekaServer
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
(4).启动服务
运行服务后,浏览器输入:http://localhost:8080/
2.创建 SpringBoot 项目 provider
创建 SpringBoot 项目的方法见:使用Idea创建 SpringBoot 项目
(1).添加依赖
pom.xml 文件中添加以下依赖:
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.1.3.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.69</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2021.0.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
(2).添加配置
application.yml 文件中添加以下配置:
server:
port: 8081 #服务端口
eureka:
client:
serviceUrl: #注册中心注册地址
defaultZone: http://127.0.0.1:8080/eureka/
spring:
application:
name: service-provider #服务名称
(3).启动类添加注解
项目启动类添加注解:@EnableEurekaClient
@SpringBootApplication
@EnableEurekaClient
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}
(4).新建订单实体类
@Data
public class Order {
private String orderId; // 订单 id
private Long userId; // 用户 id
private Date createDate; // 创建时间
private Date updateDate; // 修改时间
private String orderDetails; // 订单详情
}
(5).新建订单服务接口类
package com.chaoyue.provider.service;
import com.alibaba.fastjson.JSONObject;
public interface OrderService {
/** 获取订单信息
*
* @return
*/
JSONObject getInfos();
}
(6).新建订单服务实现类
package com.chaoyue.provider.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.chaoyue.provider.entity.Order;
import com.chaoyue.provider.service.OrderService;
import org.springframework.stereotype.Service;
import java.util.Date;
@Service
public class OrderSeviceImpl implements OrderService {
/** 获取订单信息
*
* @return
*/
@Override
public JSONObject getInfos() {
Order order = new Order();
order.setOrderId("1");
order.setUserId(1L);
order.setCreateDate(new Date());
order.setUpdateDate(new Date());
order.setOrderDetails("订单详情");
return JSONObject.parseObject(JSON.toJSONString(order));
}
}
(7).新建订单控制类
package com.chaoyue.provider.controller;
import com.alibaba.fastjson.JSONObject;
import com.chaoyue.provider.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api/order")
public class OrderController {
@Autowired
private OrderService orderService;
/** 获取订单信息
*
* @return
*/
@RequestMapping("/getInfos")
public JSONObject getInfos() {
return orderService.getInfos();
}
}
(8).启动服务
启动服务,可在 Eureka 注册中心看到已注册的服务
3.创建 SpringBoot 项目 consumer
创建SpringBoot 项目的方法见:使用Idea创建 SpringBoot 项目
(1).添加依赖
pom.xml 文件中添加以下依赖:
org.springframework.cloud spring-cloud-starter-netflix-eureka-server org.springframework.cloud spring-cloud-starter-openfeign 2.1.3.RELEASE com.alibaba fastjson 1.2.69 org.projectlombok lombok 1.18.22 org.springframework.cloud spring-cloud-dependencies 2021.0.0 pom import
(2).添加配置
application.yml 文件中添加以下配置:
server:
port: 8082 #服务端口
eureka:
client:
serviceUrl: #注册中心注册地址
defaultZone: http://127.0.0.1:8080/eureka/
spring:
application:
name: service-consumer #服务名称
(3).启动类添加注解
项目启动类添加注解:@EnableEurekaClient、@EnableFeignClients
package com.chaoyue.comsumer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients(basePackages = "com.chaoyue.comsumer.feignClient")
public class ComsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ComsumerApplication.class, args);
}
}
(4).新建Feign接口
新建 OrderFeignClient 接口方法类,用来调用 provider 中的接口
package com.chaoyue.comsumer.feignClient;
import com.alibaba.fastjson.JSONObject;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@FeignClient(name = "service-provider")
public interface OrderFeignClient {
/** 获取订单信息
*
* @return
*/
@RequestMapping(value = "/api/order/getInfos", method = RequestMethod.GET)
JSONObject getInfos();
}
(5).新建订单控制类
package com.chaoyue.comsumer.controller;
import com.alibaba.fastjson.JSONObject;
import com.chaoyue.comsumer.feignClient.OrderFeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@RestController
@RequestMapping("/api/order")
public class OrderController {
@Resource
private OrderFeignClient orderFeignClient;
@RequestMapping("/getInfos")
public JSONObject getInfos() {
return orderFeignClient.getInfos();
}
}
(6).启动服务
启动服务,可在 Eureka 注册中心看到已注册的服务
四、测试
浏览器输入链接:http://localhost:8082/api/order/getInfos
总结
以上就是今天要讲的内容,如果大家要了解更多的相关内容,请关注本博客的后续博文。