美文网首页
02.SpringCloud中Feign完成两个EurekaCl

02.SpringCloud中Feign完成两个EurekaCl

作者: LewisZhu | 来源:发表于2019-12-25 14:45 被阅读0次

01.简单的例子:第一个EurekaClient(后面简称A Client)中的一个接口

@RestController
public class UserService{
   @RequestMapping(value = "/login", method = RequestMethod.POST)
   public boolean login(@RequestParam("name") String name,@RequestParam("pwd") String pwd) throws Exception {
       return "admin".equals(name) && "123456".equals(pwd) ;
   }
}

02.现在第二个EurekaClient(后面简称B Client)想要调用A Client中的那个接口,那么需要在B Client中添加Frein依赖来实现

01>.导入Feign依赖(Feign的依赖已经包含了Hystrix的依赖)
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

注意:B Client作为一个Eureka Client,当然在yml少不了client相关的一些配置并且开启hystrix
server:
  port:8081   //作为一个web项目,端口必须的配置
spring:
  application:
    name:user-customer     //eureka client的名字
eureka:
  client:
    service-url:
      defaultZone:http://localhost:7777/eureka/ 
feign:
  hystrix:
    enabled:true  //开启hystrix

02>.主类上面添加注解@EnableFeignClients,该注解表示当程序启动时,会进行包扫描,默认扫描所有带@FeignClient注解的类进行处理
@SpringBootApplication
@EnableFeignClients
@EnableDiscoveryClient
public class FeignOpenClientApplication {
...
}

03>.写个interface,用feign来调用;使用@FeignClient为本应用声明一个简单的能调用Client。其中参数name为A Client的name,fallback为这个接口调用失败之后,会去fallback这个类中去调用。
@FeignClient(name = "user-provider, fallback = UserFeignClientFallback.class)
public interface UserFeignClient {
     //这里面的方法和参数名必须和A Client中的保持一致
    @RequestMapping(value = "/login", method = RequestMethod.POST)
     public boolean login(@RequestParam("name") String name,@RequestParam("pwd") String pwd) ;
}

然后可以实现这个借口来用hystrix做这个异常处理,实现的这个类命名一般以Fallback结尾。
@Component      //备用组件 当login挂掉之后,会走这个里面
public class UserFeignClientFallback implements UserFeignClient {
     @Override
     public boolean login(@RequestParam("name") String name,@RequestParam("pwd") String pwd) {
          // 出现异常会走到这一步
          return false;
     }
}

04>.那么接下来 就直接在B Client中调用上面的接口,就相当于直接调用到A Client中的login方法
@RestController
public class LoginController{
    @Autowired   注入上面的接口,则会自动被创个出一个实现类
    private  UserFeignClient userFeignClient;
   @RequestMapping(value = "/userlogin", method = RequestMethod.GET)
   public String login(@RequestParam("name") String name,@RequestParam("pwd") String pwd) {
       if userFeignClient.login(name,pwd) {
          return "login success"
       }
   }
}

03.复杂的公共的数据在多个Eureka client中传递,可以创建个简单的maven工程来做这个数据模型

// 例如
public class User {
  private String username;
  private String password;
  ...然后生成set get方法...
}

然后 install -> Run Maven Build,这样就安装到本地仓库,其它Eureka client就可以发现这个maven工程。

此时就可以在A Client和B Client中导入这个依赖(这个common Maven的坐标),这样在A Client中就可以使用这个User对象了。
@RestController
public class UserService{
   @RequestMapping(value = "/login", method = RequestMethod.POST)
   public boolean login(@RequestBody User user) throws Exception {
       return "admin".equals(user.getUsername) && "123456".equals(user.getPassword) ;
   }
}

相关文章

网友评论

      本文标题:02.SpringCloud中Feign完成两个EurekaCl

      本文链接:https://www.haomeiwen.com/subject/pueqoctx.html