Eureka 实现feign
Eureka 实现feign
Feign理解
Feign主要是微服务项目中远程调用的一种实现方式。根据服务名称和请求url调用其他服务方法的过程。其中重要的连接点为在Eureka注册中心注册客户端,其中包括消费者端和提供者端,消费者为进行调用的服务,提供者端顾名思义为具体接口的实现方。
搭建服务
1、首先搭建项目,因为涉及多服务,我建了多个模块来模拟。
使用idea,文件-》新建项目-》maven-》下一步-》取名称(springcloud)-》完成
2、建立eureka注册中心
右键项目-》新建模块-》选择spring Initializr-》下一步
这个时候可能会报错连接不到https://start.spring.io,解决办法:自行百度,我也是试了几个才成功,我用的办法是在setting中的http代理里进行检查连接之后成功的,但是不一定都是这样的情况。
接下来填写包名项目名称等,如图
然后下一步,选择依赖,我这里选择了两个 1、Web下的spring Web 2、Spring Cloud Discovery下的EurekaServer
然后下一步-》然后完成
到这里eureka注册中心模块构建完成,需增加其配置,在application.yml文件中配置以下内容
server:
port: 8001 #指定运行端口
spring:
application:
name: eureka-server #指定服务名称
eureka:
instance:
hostname: localhost #指定主机地址
client:
fetch-registry: false #指定是否从注册中心获取服务(注册中心不需要开启)
register-with-eureka: false #指定是否要注册到注册中心(注册中心不需要开启)
server:
enable-self-preservation: false #关闭保护模式
在启动类上增加注释 @EnableEurekaServer //启用Eureka注册中心功能,到这里就完成了此模块的构建
提供端搭建
提供端主要完成接口的实现,我为了方便只简单实现一个hello world
搭建模块与上面的类似,唯一区别为在添加默认依赖是选择不同,该模块选择两个 1、Web下的spring Web 2、Spring Cloud Discovery下的Eureka Discovery Client
搭建完成后修改启动类和配置文件
启动类增加注解@EnableFeignClients和@EnableDiscoveryClient //表明是一个Eureka客户端
配置文件application.yml
server:
port: 8101 #运行端口号
spring:
application:
name: eurekaclient #服务名称
#配置数据库的连接信息
datasource:
url: jdbc:mysql://localhost:3306/test1?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai
username: root
password: XXXXXX
driver-class-name: com.mysql.cj.jdbc.Driver
eureka:
client:
register-with-eureka: true #注册到Eureka的注册中心
fetch-registry: true #获取注册实例列表
service-url:
defaultZone: http://localhost:8001/eureka/ #配置注册中心地址
搭建完成后创建controller类,编写接口
@Controller
public class HelloController {
@ResponseBody
@RequestMapping("/hello")
public String hello(){
return "Hello world!";
}
}
消费端搭建
消费端实现调用提供端接口的功能,模块搭建与提供端一摸一样,不重复描述了,该模块中主要是创建一个接口类,通过这个接口类进行调用提供端的feign接口
创建一个feignService接口
@FeignClient("eurekaclient")
@ResponseBody
public interface FeignService {
@RequestMapping("/hello")
public String test();
}
注意需增加注解@FeignClient(“eurekaclient”),该注解表示调用的服务为eurekaclient,且该服务一定要在注册中心注册过。@RequestMapping(“/hello”)为调用路径,需与提供端保持一致。
到此代码编写完成,进行测试,两种测试方法,编写测试类
执行结果:
第二种编写controller类通过网页访问
@RestController
@RequestMapping
public class feigncontroller {
@Autowired
FeignService service;
@RequestMapping("/test")
public String test() {
return service.test();
}
}
打开网页输入localhost:8102/test 结果为