Gradle+Springcloud构建项目(三)FeignClient-服务消费调用

Gradle+Springcloud构建项目(三)FeignClient-服务消费调用

Gradle+Springcloud构建项目(一)

Gradle+Springcloud构建项目(二)eureka分布式注册中心

前两章讲了如何搭建eureka分布式注册中心,那么这一章,我们就尝试着搭建生产者与消费者的服务。

0、基于gradle的调整

大家都知道,gradle比起maven来说,更加的轻便与快捷,比如免去了使用xml来构建项目的繁琐,要从仓库下载jar包,只需要一行代码。同时,它也拥有maven中pom.xml父类子类继承的方法。
这样一来,子模块中就不需要再引这些jar包了,项目变得更加简洁。

Gradle+Springcloud构建项目(三)FeignClient-服务消费调用_第1张图片

1、Feign

Feign是一个声明式的Web服务客户端。这使得Web服务客户端的写入更加方便 要使用Feign创建一个界面并对其进行注释。它具有可插入注释支持,包括Feign注释和JAX-RS注释。Feign还支持可插拔编码器和解码器。Spring Cloud增加了对Spring MVC注释的支持,并使用Spring Web中默认使用的HttpMessageConverters。Spring Cloud集成Ribbon和Eureka以在使用Feign时提供负载均衡的http客户端。

1、1 建立生产者项目

与之前的一样
Gradle+Springcloud构建项目(三)FeignClient-服务消费调用_第2张图片
Gradle+Springcloud构建项目(三)FeignClient-服务消费调用_第3张图片其他的步骤和我们之间构建euraka注册中心时候一模一样,忘记的小伙伴可以翻翻前面的内容

因为准备搭建一个生产者集群,那么这边可以再按照上诉流程构建一个消费者服务

1、2 配置类配置

eureka.client.service-url.defaultZone=http://eureka2:8089/eureka/,http://eureka1:8088/eureka/
server.port=8101
spring.application.name=project-service
feign.hystrix.enabled=true

eureka.client.service-url.defaultZone=http://eureka2:8089/eureka/,http://eureka1:8088/eureka/
server.port=8102
spring.application.name=project-service
feign.hystrix.enabled=true

Gradle+Springcloud构建项目(三)FeignClient-服务消费调用_第4张图片

Gradle+Springcloud构建项目(三)FeignClient-服务消费调用_第5张图片

1、3 启动类

启动类中添加@EnableDiscoveryClient注解 @EnableFeignClients注解

Gradle+Springcloud构建项目(三)FeignClient-服务消费调用_第6张图片@EnableFeignClients 介绍

1、@FeignClient注释中,String值(以上“存储”)是一个任意的客户端名称,用于创建Ribbon负载平衡器
2、Spring Cloud的Feign支持的中心概念是指定的客户端。每个假装客户端都是组合的组件的一部分,它们一起工作以根据需要联系远程服务器,并且该集合具有您将其作为应用程序开发人员使用@FeignClient注释的名称。Spring Cloud根据需要,使用FeignClientsConfiguration为每个已命名的客户端创建一个新的集合ApplicationContext
Spring Cloud可以通过使用@FeignClient声明额外的配置(FeignClientsConfiguration)来完全控制假客户端。

2、1 建立消费者项目

Gradle+Springcloud构建项目(三)FeignClient-服务消费调用_第7张图片Gradle+Springcloud构建项目(三)FeignClient-服务消费调用_第8张图片这里我们就先建立一个消费者,因为多个消费者和一个消费者在原理是是相同的(大概吧~)

2、2 配置类配置

spring.application.name=projcet-client
server.port=1133
eureka.client.service-url.defaultZone=http://eureka2:8089/eureka/,http://eureka1:8088/eureka/

Gradle+Springcloud构建项目(三)FeignClient-服务消费调用_第9张图片

2、3 启动类

Gradle+Springcloud构建项目(三)FeignClient-服务消费调用_第10张图片这边和生产者也是相同的

3 开始实现功能

3、1 生产者

Gradle+Springcloud构建项目(三)FeignClient-服务消费调用_第11张图片

public interface User {
    public Integer userlogin(String mnum,String mpassword);
}
@Service("users")
public class IuserImpl implements User {
    @Override
    public Integer userlogin(String mnum, String mpassword) {
        if("alex".equals(mnum)&&"ryc".equals(mpassword)){
            return 1;
        }
            return 0;

    }
}
@RestController
@RequestMapping("/user")
public class UserController {
    @Resource(name ="users")
    private IuserImpl iu =null;

    @GetMapping("/login/{uid}/{pwd}")
    public String login(@PathVariable("uid")String uid, @PathVariable("pwd")String pwd) {
        System.out.println("uid:"+uid+"---"+"pwd"+pwd);
        System.out.println("登录情况"+iu.userlogin(uid, pwd));
        if(iu.userlogin(uid, pwd)>0) {

            System.out.println("登录成功Service2");
        return "登录成功Service1";
        }
        System.out.println("登录失败service2");

        return  "登录失败service1";

    }
}

生产者记得一式两份以后,我们就可以开始写消费者的代码了

3、2消费者

首先我们要知道

  • 客户端调用服务器的方法,Feign是一个声明式的Web Service客户端,
  • 它使得编写Web Serivce客户端变得更加简单。
  • 我们只需要使用Feign来创建一个接口并用注解来配置它既可完成。
@FeignClient(value ="project-service" )
public interface UserService {
	
	 
	 @GetMapping("user/login/{uid}/{pwd}")
	public String login(@PathVariable("uid")String uid,@PathVariable("pwd")String pwd); 
	 
	
}

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService service;//远程服务 
    
    /*
     * 通过Feign远程服务
     *
     */
    @GetMapping("/login/{uid}/{pwd}")
    public String login(String uid, String pwd) {
        System.out.println("绘制:"+service.login(uid, pwd));
        if(service.login(uid, pwd).equals("fail")) {
            return  "fail";
        }else {
            return service.login(uid, pwd);
        }
    }
}

这样 生产者和消费者的模拟代码我们也写完了,重点就在于FeignClient这个注解联通了我们的生产者和消费者

4、测试一下

接下来,我们可以按照顺序依次启动服务

然鹅 出了一些问题
Gradle+Springcloud构建项目(三)FeignClient-服务消费调用_第12张图片
可能是我的理解和写法有问题,subprojects并没有让子类继承这些jar包
于是我们在每个子类的build.gradle中加入这两句。。。。

implementation 'org.springframework.boot:spring-boot-starter-web'
annotationProcessor 'org.projectlombok:lombok'

Gradle+Springcloud构建项目(三)FeignClient-服务消费调用_第13张图片看到这张图就代表我们成了!

当然 大家要注意下jar包们的版本问题,不然会不断地出现问题

你可能感兴趣的:(Gradle+Springcloud构建项目(三)FeignClient-服务消费调用)