前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >服务发现与消费--Eureka与Ribbon的联手出击

服务发现与消费--Eureka与Ribbon的联手出击

作者头像
JathonKatu
发布2020-10-27 14:35:16
4220
发布2020-10-27 14:35:16
举报
文章被收录于专栏:JathonKatu

服务消费者的目标只有两个:发现服务,消费服务。其中服务的发现由Eureka客户端提供,而服务的消费由Ribbon完成。

Ribbon是一个基于Http和Tcp的客户端负载均衡器,他可以在通过客户端配置的ribbonServerList服务端列表去轮询访问以达到负载均衡的作用。当Ribbon与Eureka联合使用时,Ribbon的服务清单RibbonServerList会被DiscoveryEnabledNIWSServerList重写,扩展成从Eureka注册中心获取服务端列表。

我们先启动上一节的服务端*2和接口提供端,用于测试注册的服务时候能够使用,以及负载均衡。

然后另外新建一个消费端,消费端除了普通的springboot项目需要的依赖,还要在pom文件加入以下内容

代码语言:javascript
复制
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    <version>2.2.2.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
    <version>2.2.2.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 这里为了监察运行情况,我加入了下面这个引用,如果不需要监察可以不加-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

下面是消费方的application.java代码:

代码语言:javascript
复制

@EnableDiscoveryClient
@SpringBootApplication
public class BlogApplication {
    @Bean
    @LoadBalanced
    RestTemplate restTemplate(){
        return new RestTemplate();
    }
    public static void main(String[] args) {
        SpringApplication.run(BlogApplication.class, args);
    }
}

可以看出来和服务提供方的差别并不是特别大。

其中@LocalBalanced可以提供负载均衡

(https://blog.csdn.net/xiao_jun_0820/article/details/78917215)

消费方的restful api如下:

代码语言:javascript
复制
@RestController
public class ConsumerController{
    private final Logger logger = Logger.getLogger("ConsumerController");
    
    @Autowired
    private RestTemplate restTemplate;
    
    @RequestMapping("/ribbon-consumer")
    public String helloConsumer(@RequestParam String name){
        logger.info("进入了方法");
        return restTemplate.getForEntity("http://EUREKA-CLIENT/hello?name=" + name,String.class).getBody();
    }
}

这里为了增加互动性,我将之前的eureka-client的hello接口修改了以下

代码语言:javascript
复制
@RequestMapping("/hello")
  public String index(@RequestParam String name) {
    ServiceInstance instance = client.getInstances(registration.getServiceId()).get(0);
    logger.info("/hello,host: " + instance.getHost() + " , service_id: " + instance.getServiceId());
    return "Hello " + name + "!";
  }

至此,访问我们的消费者api的链接http://localhost:8081/ribbon-consumer?name=JathonKatu

可以看到结果

可以观察提供接口的类此时的日志:

代码语言:javascript
复制
2020-04-12 19:24:28.871  INFO 23240 --- [io-8080-exec-10] HelloController                          : /hello,host: DESKTOP-VVVH0SM , service_id: EUREKA-CLIENT
2020-04-12 19:29:06.633  INFO 23240 --- [trap-executor-0] c.n.d.s.r.aws.ConfigClusterResolver      : Resolving eureka endpoints via configuration

说明我们的服务已经通过平台调通了。

并且,我将服务提供方放在peer1的Eureka服务器上,将服务的消费方放在peer2的Eureka服务器上,通过两台服务器的高可用互相备份,最终访问通过,和网上说的必须放在同一Eureka服务器上个并不一致。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JathonKatu 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档