Spring Cloud-优雅的Feign,2024年最新java三大特性面试题目及答案

(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开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
img

写在最后

学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!

最后再分享的一些BATJ等大厂20、21年的面试题,把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,上面只是以图片的形式给大家展示一部分。

蚂蚁金服三面直击面试官的Redis三连,Redis面试复习大纲在手,不慌

Mybatis面试专题

蚂蚁金服三面直击面试官的Redis三连,Redis面试复习大纲在手,不慌

MySQL面试专题

蚂蚁金服三面直击面试官的Redis三连,Redis面试复习大纲在手,不慌

并发编程面试专题

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

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)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值