Gradle+Springcloud构建项目(一)
Gradle+Springcloud构建项目(二)eureka分布式注册中心
前两章讲了如何搭建eureka分布式注册中心,那么这一章,我们就尝试着搭建生产者与消费者的服务。
大家都知道,gradle比起maven来说,更加的轻便与快捷,比如免去了使用xml来构建项目的繁琐,要从仓库下载jar包,只需要一行代码。同时,它也拥有maven中pom.xml父类子类继承的方法。
这样一来,子模块中就不需要再引这些jar包了,项目变得更加简洁。
Feign是一个声明式的Web服务客户端。这使得Web服务客户端的写入更加方便 要使用Feign创建一个界面并对其进行注释。它具有可插入注释支持,包括Feign注释和JAX-RS注释。Feign还支持可插拔编码器和解码器。Spring Cloud增加了对Spring MVC注释的支持,并使用Spring Web中默认使用的HttpMessageConverters。Spring Cloud集成Ribbon和Eureka以在使用Feign时提供负载均衡的http客户端。
与之前的一样
其他的步骤和我们之间构建euraka注册中心时候一模一样,忘记的小伙伴可以翻翻前面的内容
因为准备搭建一个生产者集群,那么这边可以再按照上诉流程构建一个消费者服务
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
启动类中添加@EnableDiscoveryClient注解 @EnableFeignClients注解
1、@FeignClient注释中,String值(以上“存储”)是一个任意的客户端名称,用于创建Ribbon负载平衡器
2、Spring Cloud的Feign支持的中心概念是指定的客户端。每个假装客户端都是组合的组件的一部分,它们一起工作以根据需要联系远程服务器,并且该集合具有您将其作为应用程序开发人员使用@FeignClient注释的名称。Spring Cloud根据需要,使用FeignClientsConfiguration为每个已命名的客户端创建一个新的集合ApplicationContext
Spring Cloud可以通过使用@FeignClient声明额外的配置(FeignClientsConfiguration)来完全控制假客户端。
这里我们就先建立一个消费者,因为多个消费者和一个消费者在原理是是相同的(大概吧~)
spring.application.name=projcet-client
server.port=1133
eureka.client.service-url.defaultZone=http://eureka2:8089/eureka/,http://eureka1:8088/eureka/
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";
}
}
生产者记得一式两份以后,我们就可以开始写消费者的代码了
首先我们要知道
@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这个注解联通了我们的生产者和消费者
接下来,我们可以按照顺序依次启动服务
然鹅 出了一些问题
可能是我的理解和写法有问题,subprojects并没有让子类继承这些jar包
于是我们在每个子类的build.gradle中加入这两句。。。。
implementation 'org.springframework.boot:spring-boot-starter-web'
annotationProcessor 'org.projectlombok:lombok'
当然 大家要注意下jar包们的版本问题,不然会不断地出现问题