创建一个服务消费者 ribbon+restTemplate

本文详细介绍了如何使用SpringCloud中的Ribbon和RestTemplate实现微服务之间的调用。通过创建一个名为consumer-ribbon的子模块,配置Eureka客户端并实现基于HTTP RESTful的服务调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SpringCloud视频教程:

https://ke.qq.com/course/2805647?tuin=a3e3fb1&from_uin=171851697&from=1000201007

个人博客纯净版

http://www.51ufo.cn/%E5%BE%AE%E6%9C%8D%E5%8A%A1/%E5%88%86%E5%B8%83%E5%BC%8F/2020/07/10/SpringCloud%E5%85%A5%E9%97%A84-%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AA%E6%9C%8D%E5%8A%A1%E6%B6%88%E8%B4%B9%E8%80%85-ribbon+restTemplate.html

本文代码git地址 https://gitee.com/xmingtx/springcloud-lesson.git

 

在前面,讲了服务的注册和发现。在微服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于http restful的。Spring cloud有两种服务调用方式,一种是ribbon+restTemplate,另一种是feign。现在我们首先讲解下基于ribbon+restTemplate。

首先我们在父模块下创建一个子模块,名称为consumer-ribbon,pom.xml依赖如下:

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
    </dependency>
</dependencies>

在resources目录下创建application.yml配置文件,配置如下:

server:
  port: 8090

spring:
  application:
    name: consumer-ribbon

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
  instance:
    prefer-ip-address: true
    instance-id: ${spring.cloud.client.ip-address}:${server.port}

然后创建一个启动类,通过注解@EnableEurekaClient 表明自己是一个eurekaclient,代码如下:

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

创建HelloControler,代码如下:

@RestController
public class HelloController {

    @Autowired
    private DiscoveryClient discoveryClient;

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping(value = "/hello")
    public String hello(@RequestParam String name) {
        List<ServiceInstance> instances = discoveryClient.getInstances("eureka-client-provider");
        ServiceInstance instance = instances.get(0);
        return restTemplate.getForObject(instance.getUri() + "/hello?name=" + name, String.class);
    }
}

启动服务,eureka注册中心又多了一个服务,如下:

 

在浏览器访问http://localhost:8090/hello?name=xiaoming,返回结果如下:

hello, xiaoming, 我是服务提供者:端口为:8080

说明通过消费者调用服务提供者的服务调用成功了

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值