3.添加服务调用者

news/2024/6/1 21:29:16 标签: eureka, java, spring cloud

在原有基础上添加服务调用者。大体思路为:

第一步、创建eureka注册中心;

第二步、注册服务;

第三步、调用服务;

前两步骤可以参考文章。

一、创建调用服务程序

创建web项目,用来消费服务。

实现功能:获取eureka服务中的服务列表、获取指定服务、获取指定服务并且通过RestTemplate方式消费服务、修改Ribbon负载均衡策略。

pom文件配置

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client
</artifactId>
</dependency>
    <!--     spring-cloud-starter-netflix-eureka-client 需要手动引入actuator包   -->
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

配置文件,向eureka注册服务

# 应用名称
spring.application.name=customer
# 应用服务 WEB 访问端口
server.port=8002
eureka.client.service-url.defaultZone=http://euk1.com:7001/eureka/

服务

java"> @Autowired
    DiscoveryClient client;

    @Autowired
    EurekaClient eurekaClient;

    /**
     * Ribbon获取服务
     */
    @Autowired
    LoadBalancerClient lb;

    /**
     * 获取服务列表
     * @return
     */
    @GetMapping("getServers")
    public Object getServers() {
        List<String> services = client.getServices();
        return services;
    }

    /**
     * 获取指定的服务
     * @return
     */
    @GetMapping("listServersById")
    public Object getServerById() {
        List<ServiceInstance> provider = client.getInstances("provider");
        return provider;
    }

    /**
     * 输出指定服务的所有信息
     * @return
     */
    @GetMapping("getServerDetail")
    public Object getServerDetail() {
        List<ServiceInstance> provider = client.getInstances("provider");
        provider.forEach(e->{
            System.out.println(ToStringBuilder.reflectionToString(e));
        });
        return provider;
    }

    /**
     * 获取指定服务,并且通过resttemplate调用响应服务
     * @return
     */
    @GetMapping("sendProvider")
    public Object sendProvider() {
//        具体服务
//        List<InstanceInfo> provider = eurekaClient.getInstancesById("LAPTOP-CCRUI6V2:provider:8001");
        List<InstanceInfo> provider = eurekaClient.getInstancesByVipAddress("provider", false);
        provider.forEach(e->{
            System.out.println(ToStringBuilder.reflectionToString(e));
        });
        if (provider.size() > 0){
            //
            InstanceInfo instanceInfo = provider.get(0);
            if (instanceInfo.getStatus() == InstanceInfo.InstanceStatus.UP){
                // 拼装url
                String url = "http://" + instanceInfo.getHostName() + ":" + instanceInfo.getPort() + "/getPort";
                RestTemplate restTemplate = new RestTemplate();
                String forObject = restTemplate.getForObject(url, String.class);
                return forObject;
            }
        }
        return provider;
    }

    /**
     * 服务的负载均衡
     * @return
     */
    @GetMapping("client5")
    public Object client5() {
//        具体服务
        // ribbon完成客户端的负载均衡
        ServiceInstance instanceInfo = lb.choose("provider");
        // 组装数据
        String url = "http://" + instanceInfo.getHost() + ":" + instanceInfo.getPort() + "/getPort";
        RestTemplate restTemplate = new RestTemplate();
        String forObject = restTemplate.getForObject(url, String.class);
        return forObject;
    }

二、测试

打开eureka管理页面

 测试服务调用者”customer“是否正常,点击status对应的url,通过修改url,进行测试

1.获取服务列表 http://laptop-ccrui6v2:8002/getServers

2.获取指定服务http://laptop-ccrui6v2:8002/listServersById

 ......

n-1:取指定服务,并且通过resttemplate调用响应服务

http://laptop-ccrui6v2:8002/sendProvider 

输出的端口是固定的。

n: 采用负载均衡策略调用服务:http://laptop-ccrui6v2:8002/client5

会轮询端口。

三、扩展

3.1 Ribbon策略修改

方法一:注入形式

java">@Bean
    public IRule myRule() {
        return new RandomRule();
    }

方法二:配置文件指明

java">provider.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule

方法三:自定义

参考:自定义ribbon负载均衡策略 -阿里云开发者社区

3.2 获取服务的url,不需要进行拼接

依靠@LoadBalanced注解

java">@Bean
    @LoadBalanced
    RestTemplate getRestTemplate() {
        return new RestTemplate();
    }

使用

java"> // 组装数据
        String url = "http://provider/getPort";
        String forObject = restTemplate.getForObject(url, String.class);

3.3 调用者,调用指定服务

调用者,调用指定服务,忽略负载均衡策略;

java">#关闭eureka
ribbon.eureka.enabled=false
#本地直连
ribbon.listOfServers=localhost:8000


http://www.niftyadmin.cn/n/1022548.html

相关文章

4.简单集成spring-security

一、eureka注册中心配置 引入security包 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency> 配置跨域 Component public class WebSecurityConfig extend…

动态对象库加载

代码如下所示&#xff1a; Repositories Collection.Add "D&#xff1a;\QTP自动化测试技术领航\link.tsr" 这句代码写在脚本中&#xff0c;一旦被执行到以后会触发加载对象库文件使其成为副对象库的事件&#xff0c;效果和手工添加副对象库完全一致&#xff0c;只是…

5.通过接口实现服务上下线

一、yml文件配置 # 应用名称 spring.application.nameprovider # 应用服务 WEB 访问端口 server.port8000eureka.client.service-url.defaultZonehttp://euk1.com:7001/eureka/ # 暴露全部端口 management.endpoints.web.exposure.include*#开启关闭节点 允许远程关闭此节点 m…

【Ubuntu 16.04 使用日志】LOG

LOG: 2017-4-22 添加"Firefox安装flash"、"安装netease_cloud_music与Chrome" 2017-4-23 添加 安装eclipse 2017-4-24 定制 Ubuntu桌面 1.Firefox安装flash 从 Adobe 中下载 tar.gz 文件&#xff0c;解压之后可以查看 readme.txt&#xff0c;下面是描述的安…

linux 压缩文件的命令总结

linux 压缩文件的命令总结 Linux压缩文件的读取 *.Z compress 程序压缩的档案&#xff1b; *.bz2 bzip2 程序压缩的档案&#xff1b; *.gz gzip 程序压缩的档案。 *.tar tar 程序打包的数据&#xff0c;并没有压缩过&#xff1b; *…

C#中WebBrowser获取页面标签class值

由于class是JavaScript的保留关键字 所以在C#中使用GetAttribute("className")来获取hmtlElement的class值 而不是GetAttribute("class")转载于:https://www.cnblogs.com/ymtianyu/p/6756384.html

Angular Universal(统一平台)笔记

angular官网高级文档AngularUniversal部分的翻译总结&#xff0c;这东西在angular4开始正式被官方支持了&#xff0c;目前其实支持的服务器端还没有很多&#xff0c;但好歹包括了node和DotNetCore&#xff0c;算是个进一步优化应用以及扩展需求(强化服务端能力)的方案。 正文开…

自学it18大数据笔记-第二阶段Kafka-day1——会持续更新……

笔记为自学时随手记录&#xff0c;如有错误&#xff0c;欢迎指正&#xff0c;不胜感激&#xff01;现已广州转移至上海&#xff0c;欢迎小伙伴们加qq或微博沟通交流&#xff08;QQ&#xff0c;微博和博客同名&#xff09; 笔记分享&#xff1a;自学it18大数据笔记-第二阶段Kafk…