微服务--Eureka Provider Consumer通信

步骤


  • 前提基于 Eureka Server 注册中心搭建完成
  • 开始搭建Provider 和 Consumer 服务
  • 通过Fegin 进行通信

搭建Eureka Provider


创建Eureka Provider工程 ;POM引入依赖 netflix-eureka-client
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- eureka server依赖包 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <!-- 低版本 -->
        <!-- <artifactId>spring-cloud-starter-eureka-server</artifactId> -->
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
application.properties 配置注册中心
spring.application.name=spring-cloud-eureka-provider
server.port=9000
eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/
启动类
  • 声明启用服务发现客户端
  • 标注 @EnableDiscoveryClient 注解
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class EurekaConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaConsumerApplication.class, args);
    }
}
提供一个HTTP服务
  • 用于测试调用
@RestController
@RequestMapping("/")
public class IndexController {
    @RequestMapping("/hello")
    public String hello(String name) {
        return "hello" + name;
    }
}
启动
  • 前提需要Eureka Server 注册中心先行启动
  • 启动注册完成
    在这里插入图片描述在这里插入图片描述

搭建Eureka Consumer


创建Eureka Consumer工程
  • 引入netflix-eureka-client Eureka客户端jar包
  • starter-openfeign feign 声明式调用jar包
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- eureka server依赖包 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
    <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>
配置服务实例,注册中心
  • application.properties
spring.application.name=spring-cloud-eureka-consumer
server.port=8080
eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/
启动类
  • 开启Eureka服务发现 ;加上注解:@EnableDiscoveryClient
  • 开始Feign 客户端声明式通信 ; 加上注解:@EnableFeignClients
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class EurekaConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaConsumerApplication.class, args);
    }
}
声明Feign Client 接口;只需要接口方法
  • @FeignClient 注解来生命;name 或 value 指定远程服务的实例名
  • @RequestMapping 指定访问http 路径
  • @RequestParam request请求参数
@FeignClient(name = "spring-cloud-eureka-provider")
public interface IndexRemote {
    @RequestMapping(value = "/hello")
    String hello(@RequestParam(value = "name") String name);
}
服务调用
  • 注入FeignClient生命的远程调用
  • 调用接口
@RestController
@RequestMapping("/")
public class ConsumerController {
    @Autowired
    private IndexRemote indexRemote;

    @RequestMapping("/index/{name}")
    public String index(@PathVariable("name") String name) {
        return indexRemote.hello(name);
    }
}
启动、调试调用
  • 启动注册完成在这里插入图片描述
    在这里插入图片描述
  • 调用成功
    在这里插入图片描述

Eureka Provider集群;Feign负载均衡


Eureka Provider集群
  • 配置集群 application.yml 文件 ;指定多个profiles
spring:
  application:
    name: spring-cloud-eureka-provider
  profiles: provider1

server:
  port: 9000

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8000/eureka/

---
spring:
  application:
    name: spring-cloud-eureka-provider
  profiles: provider2

server:
  port: 9001

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8000/eureka/

---
spring:
  application:
    name: spring-cloud-eureka-provider
  profiles: provider3

server:
  port: 9002

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8000/eureka/
  • 服务类稍作修改,返回具体节点信息
@RestController
@RequestMapping("/")
public class IndexController {

    @Value("${spring.profiles}")
    private String profile;

    @RequestMapping("/hello")
    public String hello(String name) {
        return "hello" + name + profile;
    }

}
启动注册
  • 三台Provider都启动成功
  • 查看Eureka Server注册信息,注册成功
    在这里插入图片描述
客户端调用调试
  • 分别进行三次请求,默认轮询到Provider的三台节点
    在这里插入图片描述在这里插入图片描述在这里插入图片描述

Feign


简单介绍
  • Feign是一个声明式Web Service客户端。使用Feign能让编写Web Service客户端更加简单, 它的使用方法是定义一个接口,然后在上面添加注解,同时也支持JAX-RS标准的注解。
  • Feign也支持可拔插式的编码器和解码器。Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters。
  • Feign可以与Eureka和Ribbon组合使用以支持负载均衡。
Feign Client的简单流程
  • 首先通过@EnableFeignClients注解开启FeignClient的功能,才能在程序启动时开启对@FeignClient注解的包扫描
  • 根据Feign的规则实现接口,并在接口上加上@FeignClient注解
  • 程序启动时,进行包扫描,扫描@FeignClient注解的类,注入到IOC容器中
  • 当接口被调用时,通过JDK的代理生成具体的RequestTemplate模板对象
  • 根据RequestTemplate再生成Http请求的Request对象
  • Request对象交由Client去处理,Client的网络请求框架可以是:HttpURLConnection、HttpClient和OkHttp
  • 最后Client被封装到LoadBalanceClient类,该类结合Ribbon做到负载均衡
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值