(4)编写BlogController
注意:我们这篇文章主要是为了讲清楚Feign的使用,所以一心同学并没有在这里连接数据库,怕大家被其它的依赖架包和配置文件混淆,在之后整合组件的博客中,一心同学将会进行数据库的连接以及各种组件组合以实战方式来讲解。
package com.yixin.springcloud.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class BlogController {
//表示db01这个数据库
@Value(“db01”)
private String dbsource;
//注册进来的微服务,获取一些消息
@GetMapping(“/blog/info”)
public String getInfo(){
return dbsource;
}
}
(5)编写启动类BlogProvider_8001
package com.yixin.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient
public class BlogProvider_8001 {
public static void main(String[] args) {
SpringApplication.run(BlogProvider_8001.class,args);
}
}
4.5 配置springcloud-api
(1)建立以下目录
(2)导入依赖
org.springframework.cloud
spring-cloud-starter-feign
1.4.6.RELEASE
org.projectlombok
lombok
(3)编写接口BlogClientService
注意:添加注解@FeignClient,微服务客户端注解。
value:指定微服务的名字,这样就可以使Feign客户端直接找到对应的微服务。
package com.yixin.service;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
//value就是我们服务生产方在注册中心的服务名
@FeignClient(value = “SPRINGCLOUD-PROVIDER-BLOG”)
public interface BlogClientService {
@GetMapping(“/blog/info”)
public String getInfo();
}
4.6 配置springcloud-consumer-blog-feign-80
(1)建立以下目录
(2)导入依赖
org.springframework.cloud
spring-cloud-starter-feign
1.4.6.RELEASE
com.yixin
springcloud-api
1.0-SNAPSHOT
org.springframework.cloud
spring-cloud-starter-eureka
1.4.6.RELEASE
org.springframework.boot
spring-boot-test
2.4.5
org.springframework.boot
spring-boot-starter-web
2.4.5
org.springframework.boot
spring-boot-devtools
(3)编写配置文件
server:
port: 8000
spring:
application:
name: springcloud-consumer-blog
Eureka配置:配置服务注册中心地址
eureka:
client:
register-with-eureka: false # 不向 Eureka注册自己
service-url:
defaultZone: http://localhost:7001/eureka/
(4)编写BlogConsumerController
package com.yixin.springcloud.controller;
import com.yixin.service.BlogClientService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@RestController
public class BlogConsumerController {
//这个就是我们springcloud-api下的接口
@Autowired
private BlogClientService blogClientService;
@GetMapping(“/consumer/blog”)
public String get(){
return “消费端:”+blogClientService.getInfo();
}
}
回顾
回顾之前使用RestTemplate进行调用:
package com.yixin.springcloud.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@RestController
public class BlogConsumerController {
@Autowired
private RestTemplate restTemplate;
//private static final String REST_URL_PREFIX=“http://localhost:8001”;
private static final String REST_URL_PREFIX=“http://SPRINGCLOUD-PROVIDER-BLOG”;
@GetMapping(“/consumer/blog”)
public String get(){
return “消费端:”+restTemplate.getForObject(REST_URL_PREFIX +“/blog/info”, String.class);
}
}
分析:Feign和Ribbon二者对比,前者显现出面向接口编程特点,代码看起来更清爽,而且Feign调用方式更符合我们之前在做SSM或者SprngBoot项目时,Controller层调用Service层的编程习惯!
回顾结束
(5)编写启动类BlogConsumer_feign_80
package com.yixin.springcloud;
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
// feign客户端注解,并指定要扫描的包以及配置接口BlogClientService
@EnableFeignClients(basePackages = {“com.yixin.service”})
public class BlogConsumer_feign_80 {
public static void main(String[] args) {
SpringApplication.run(BlogConsumer_feign_80.class,args);
}
}
至此我们的Feign组件就搭建完成了!
4.7 测试
依次启动:
springcloud-eureka-7001:服务注册中心
springcloud-provider-blog-8001:服务生产方
springcloud-consumer-blog-feign-80:服务消费方
a、访问:http://localhost:7001/
出现以下界面,则说明我们的服务生产方成功注册到Eureka了!
b、访问:http://localhost:8000/consumer/blog
出现以下界面,则说明测试成功!
五、Feign和Ribbon如何选择?
===================
根据个人习惯而定,如果喜欢REST风格使用Ribbon;如果喜欢社区版的面向接口风格使用Feign.
Feign 本质上也是实现了 Ribbon,只不过后者是在调用方式上,为了满足一些开发者习惯的接口调用习惯!
六、Feign 负载均衡
============
Feign同样也是支持负载均衡的,我们根据上面的项目基础再增加一个子工程:springcloud-provider-blog-8002。
springcloud-provider-blog-8002的结构与springcloud-provider-blog-8001一样。
(1)目录
(2)导入依赖
org.springframework.cloud
spring-cloud-starter-eureka
1.4.6.RELEASE
org.springframework.boot
spring-boot-test
2.4.5
org.springframework.boot
spring-boot-starter-web
2.4.5
org.springframework.boot
spring-boot-devtools
(3)编写配置文件
application.yml
注意:为了搭建负载均衡测试,spring.name务必跟springcloud-provider-blog-8001一样,这是我们的服务名。
server:
port: 8002
spring:
application:
name: springcloud-provider-blog
Eureka配置:配置服务注册中心地址
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka/
instance:
instance-id: springcloud-provider-dept-8002 #修改Eureka上的默认描述信息
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
写在最后
学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!
最后再分享的一些BATJ等大厂20、21年的面试题,把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,上面只是以图片的形式给大家展示一部分。
Mybatis面试专题
MySQL面试专题
并发编程面试专题
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
2341)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-UyfdMrZf-1712762542341)]
写在最后
学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!
最后再分享的一些BATJ等大厂20、21年的面试题,把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,上面只是以图片的形式给大家展示一部分。
[外链图片转存中…(img-g18DTUmq-1712762542341)]
Mybatis面试专题
[外链图片转存中…(img-lLsVK0yy-1712762542342)]
MySQL面试专题
[外链图片转存中…(img-JdDYem8t-1712762542342)]
并发编程面试专题
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-HbZ4a1vN-1712762542342)]