Spring Cloud(二):服务消费(Feign)与负载均衡

Feign是一个声明式Web Service客户端。使用Feign能让编写Web Service客户端更加简单, 它的使用方法是定义一个接口,然后在上面添加注解,同时也支持JAX-RS标准的注解。Feign也支持可拔插式的编码器和解码器。Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters。Feign可以与Eureka和Ribbon组合使用以支持负载均衡。

  • 创建远程调用

在上次的eureka-client中新增controller方法,返回一条带参信息

@RestController
public class ClientController {
    @RequestMapping("/message")
    public String clientMessage(@RequestParam("name") String name) {
        return name + " congratulation to you!";
    }
}

然后新建一个eureka-consumer-feign模块,导入需要的Feign依赖,生成模块后依赖如下:

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

配置文件:

spring:
  application:
    name: eureka-consumer-feign
server:
  port: 8763
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka

 在启动文件上新增@EnableFeignClients注解,表示这是Feign调用的客户端

@SpringBootApplication
@EnableFeignClients
@EnableEurekaClient
public class EurekaConsumerFeignApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaConsumerFeignApplication.class, args);
    }
}

添加远程调用,其中@FeignClient注解的value需要指向eureka-client,因为是要从client那里调用的,然后接口里的方法名称,地址,参数类型都要和调用client的一样

@FeignClient("eureka-client")
public interface FeignRemote {

    @RequestMapping(value = "/message")
    public String clientMessage(@RequestParam("name") String name);
}

然后是consumer自己的controller方法,注入FeignRemote并且在自己的方法中调用由FeignRemote调用的方法

@RestController
public class ConsumerController {
    @Autowired
    FeignRemote feignRemote;

    @RequestMapping("/message/{name}")
    public String consumerMessage(@PathVariable("name") String name) {
        return feignRemote.clientMessage(name);
    }
}
  • 测试调用

分别启动server、client、consumer三个程序,然后访问http://localhost:8762/message?name=hong,结果返回一条信息

然后访问http://localhost:8763/message/hong,得到通过使用client的方法返回的信息,说明服务消费(调用)成功

  • 负载均衡

新建eureka-client-load-balance模块,导入的依赖和client模块一样,启动文件注解一样,配置文件修改了端口号

spring:
  application:
    name: eureka-client
server:
  port: 8764
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka

然后修改client的controller方法,修改返回信息

@RestController
public class ClientController {
    @RequestMapping("/message")
    public String clientMessage(@RequestParam("name") String name) {
        return name + " i am load balance service";
    }
}

启动eureka-client-load-balance模块,打开注册中心,可以看见client有两个服务

然后访问http://localhost:8763/message/hong,结果如下

发现返回的信息会在两条交替出现,说明负载均衡功能已实现,增加多个服务提供者,结果也会是在多个服务中切换。

demo地址:https://github.com/hong52ni/SpringCloud-Demo-Aggregate

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

方木丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值