首页 > 其他分享 >二、SpringCloud Alibaba使用RestTemplate

二、SpringCloud Alibaba使用RestTemplate

时间:2023-05-14 14:35:50浏览次数:39  
标签:producer Producer SpringCloud hello RestTemplate port Alibaba public

新建模块Producer,pom.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <groupId>com.example</groupId>
        <artifactId>SpringCloudAlibabaDemo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>Producer</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>Producer</name>
    <description>Producer</description>
    <properties>
        <java.version>17</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>

</project>

配置application.properties:

server.port=7000

spring.application.name=producer
spring.cloud.nacos.discovery.server-addr=localhost:8848

新建Controller:

@RestController
public class HelloProducer {
    @Value("${server.port}")
    private int port;

    @RequestMapping("/hello")
    public String  hello() {
        return "hello,Producer,port:" + port;
    }
}

在SpringCloudAlibabaDemo的pom.xml加入

<modules>
    <module>Consumer</module>
    <module>Producer</module>
</modules>

在Consumer加入:

@Configuration
public class MyConfig {
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

修改HelloConsumer:

@RestController
@RequestMapping("/consumer")
public class HelloConsumer {
    @Autowired
    private RestTemplate restTemplate;

    @Autowired
    private DiscoveryClient discoveryClient;

    @Value("${server.port}")
    private int port;

    @RequestMapping("/hello")
    public String  hello() {
        return "hello,Consumer,port:" + port;
    }


    @RequestMapping("/rpc")
    public String rpc() {
        List<ServiceInstance> producer = discoveryClient.getInstances("producer");
        ServiceInstance serviceInstance = null;
        if (producer != null && !producer.isEmpty()) {
            serviceInstance = producer.get(0);
        }


        if (serviceInstance != null) {
            return restTemplate.getForObject("http://"+serviceInstance.getHost()+":"+serviceInstance.getPort()+"/hello",String.class);
        } else {
            throw new RuntimeException("未找到Producer服务");
        }
    }
}

访问http://localhost:7001/consumer/rpc,看到hello,Producer,port:7000。在这里是通过DiscoveryClient解析出服务的ip和端口后通过RestTemplate调用。

 

在2021.0.4.0版本的springCloudAlibaba中,spring-cloud-starter-alibaba-nacos-discovery依赖引入了spring-cloud-loadbalancer作为负载均衡,RestTemplate要使用负载均衡,只需添加@LoadBalanced:

@Configuration
public class MyConfig {
    @LoadBalanced
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

同时添加依赖:

   <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-loadbalancer</artifactId>
        <version>3.1.4</version>
    </dependency>

修改HelloConsumer:

@RequestMapping("/rpc1")
public String rpc1() {
    return restTemplate.getForObject("http://producer/hello",String.class);
}

访问http://localhost:7001/consumer/rpc1,看到hello,Producer,port:7000。

 

在启动一个端口是7002的Producer,访问http://localhost:7001/consumer/rpc1,看到负载均衡成功。

标签:producer,Producer,SpringCloud,hello,RestTemplate,port,Alibaba,public
From: https://www.cnblogs.com/shigongp/p/17399175.html

相关文章

  • 一、SpringCloud Alibaba之Nacos作为注册中心
    一、简介SpringCloud阿里巴巴旨在为微服务开发提供一站式解决方案。该项目包括开发分布式应用程序和服务所需的组件,以便开发人员可以使用SpringCloud编程模型轻松地开发分布式应用。使用SpringCloudAlibaba,只需要添加一些注释和配置,就可以将阿里巴巴的分布式解决方案用于您的......
  • SpringCloud LoadBalancer
    SpringCloud提供了自己的客户端负载均衡器抽象和实现。对于负载平衡机制,增加了ReactiveLoadBalancer接口,并为其提供了基于RoundRobin和Random的实现。负载均衡策略默认是RoundRobin。支持ServiceInstanceListSupplier的基于服务发现的实现,该实现使用类路径中可用的发现客户端从......
  • 创建SpringCloud项目
    SpringCloud简介SpringCloud是目前国内使用最广泛的微服务框架。SpringCloud集成了各种微服务功能组件,并基于SpringBoot实现了这些组件的自动装配,从而提供了良好的开箱即用体验。SpringCloud常用组件1.服务注册发现:Eureka,Nacos,Consul2.服务远程调用:OpenFeign,Dubbo3.服务链路......
  • com-alibaba-fastjson转换json时默认将属性第一个字母转小写
    问题描述将实体类对象转为json字符串的时候,会将属性名首字母改为小写例如此出User队形有两个属性,USER_NAME和USER_AGE,首字母均为大写将实体类对象转为JSON后首字母全都转换为了小写解决方法这是因为阿里巴巴的fastjson框架默认使用了JavaBean规范中的命名约定,将属性名首字......
  • SpringCloud之Zookeeper作为配置中心
    Zookeeper提供了一个分层的命名空间,让客户端可以存储任意数据,例如配置数据。SpringCloudZookeeperConfig是ConfigServer和Client的替代方案。在特殊的“bootstrap”阶段,配置被加载到Spring环境中。默认情况下,配置存储在/config命名空间中。将根据应用程序的名称和活动配置文件......
  • [SpringCloud]Spring-Cloud-Gateway之启动过程(源码分析)
    1前言1.1环境信息Spring-Cloud-Gateway:2.2.9.RELEASEorg.springframework.boot:spring-boot:2.3.12.RELEASEio.projectreactor.netty:reactor-netty:0.9.20.RELEASEio.netty:netty-transport:4.1.65.FINAL2启动过程#与Netty的调用链路2.1简版(V1.0)cn.seres.b......
  • SpringCloud之Zookeeper作为注册中心
    SpringCloudZookeeper通过自动配置和绑定到Spring环境,为SpringBoot应用程序提供ApacheZookeepper集成。通过一些简单的注释,可以快速启用和配置应用程序中的常见模式,并使用Zookeeper构建大型分布式系统。提供的模式包括服务发现和分布式配置。 特征服务发现:可以向Zookeepe......
  • springboot alibaba druid数据库连接池配置,输出可执行sql
    #数据源配置spring:datasource:type:com.alibaba.druid.pool.DruidDataSourcedruid:#初始连接数initialSize:5#最小连接池数量minIdle:2#最大连接池数量maxActive:50#配置获取连接等待超时的时间......
  • Spring Boot 单体应用一键升级成 Spring Cloud Alibaba
    作者:十眠背景随着ApacheDubbo、Nacos以及SpringCloud等服务框架的流行,越来越多的企业开始采用微服务架构来构建其应用程序。微服务架构使企业能够将其应用程序拆分成多个小型服务,这些服务可以独立部署和扩展。这种架构模式也使企业更容易实现敏捷开发和持续交付,从而提高了......
  • SpringCloud Hoxton——Consul服务注册与发现
    1.开篇Consul是什么?Consul是一套开源的分布式服务发现和配置管理系统,由HashiCorp公司用Go语言开发。提供了微服务系统中的服务治理、配置中心、控制总线等功能。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全方位的服务网格,总之Consul提供了一种完整的服务......