SpringCloud实现服务间调用(RestTemplate方式)
2020-12-13 15:36
上一篇文章《SpringCloud搭建注册中心与服务注册》介绍了注册中心的搭建和服务的注册,本文将介绍下服务消费者调用服务提供者的过程。
本文目录
一、服务调用流程二、服务提供者三、服务消费者四、服务调用实战
一、服务调用流程
总体流程是首先启动注册中心,服务提供者提供服务并注册到注册中心,消费者从注册中心中获取服务并执行。
实现服务调用需要有三个角色:服务注册中心、服务提供者和服务消费者,其中服务注册中心和服务提供者上一篇文章已经实现了,下面会详细演示下服务消费者搭建并调用服务的过程。
二、服务提供者
改造下上篇文章中的服务提供者,添加一个controller,UserController.java代码如下:
/**
 * 用户服务
 */
@Slf4j
@RestController
@RequestMapping("/provider")
public class UserController {
    static Map userMap = new HashMap();
    static {
        //模拟数据库
        User user1 = new User(1, "张三", "123456");
        userMap.put(1, user1);
        User user2 = new User(2, "李四", "123123");
        userMap.put(2, user2);
    }
    /**
     * 根据id 查询
     */
    @RequestMapping("/getUser")
    public String getUser(Integer id) {
        User user = userMap.get(id);
        return JSON.toJSONString(user);
    }
}
 
三、服务消费者
首先新建一个SpringBoot项目,命名spring-cloud-user-consumer,然后按照下面步骤编写代码即可。
- pom.xml代码
 
添加eureka-server的依赖,代码如下:
dependencies>
    dependency>
        groupId>org.springframework.bootgroupId>
        artifactId>spring-boot-starter-webartifactId>
    dependency>
    dependency>
        groupId>org.springframework.bootgroupId>
        artifactId>spring-boot-starter-testartifactId>
        scope>testscope>
    dependency>
    dependency>
        groupId>org.springframework.cloudgroupId>
        artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>
    dependency>
    dependency>
        groupId>org.projectlombokgroupId>
        artifactId>lombokartifactId>
        optional>trueoptional>
    dependency>
dependencies>
dependencyManagement>
    dependencies>
        dependency>
            groupId>org.springframework.cloudgroupId>
            artifactId>spring-cloud-dependenciesartifactId>
            version>Finchley.RELEASEversion>
            type>pomtype>
            scope>importscope>
        dependency>
    dependencies>
dependencyManagement>
- 启动类代码
 
启动类添加注解@EnableDiscoveryClient,添加该注解后,项目就具有了服务注册的功能,代码如下:
@EnableDiscoveryClient
@SpringBootApplication
public class SpringCloudUserConsumerApplication {
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
    public static void main(String[] args) {
        SpringApplication.run(SpringCloudUserConsumerApplication.class, args);
    }
}
- 配置文件
 
使用yml的配置文件,application.yml配置如下:
server:
  port: 8082 #服务端口
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:9001/eureka/
spring:
  application:
    name: user-service-consumer
四、服务调用实战
- 启动服务中心并注册服务
 
代码编写之后,按顺序启动spring-cloud-eureka、spring-cloud-user-service和spring-cloud-user-consumer,先访问注册中心http://localhost:9001/,出现下图说明注册中心和两个服务以及注册成功。

注册中心运行截图
- 服务调用
 
打开postman访问http://localhost:8082/consumer/getUser?id=2,出现下图后说明服务已经调用成功。

postman调用截图
到此SpringCloud实现服务间调用功能已经全部实现,有问题欢迎留言沟通哦!
完整源码地址: https://github.com/suisui2019/springboot-study
推荐阅读
1.SpringCloud搭建注册中心与服务注册
2.SpringBoot整合ActiveMQ,看这篇就够了!
3.别在 Java 代码里乱打日志了,这才是正确的打日志姿势!
4.编码神器Lombok,学会后开发效率至少提高一倍!
5.利用Spring Boot+zxing,生成二维码还能这么简单
限时领取免费Java相关资料,涵盖了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo/Kafka、Hadoop、Hbase、Flink等高并发分布式、大数据、机器学习等技术。
关注下方公众号即可免费领取:
Java碎碎念公众号
文章标题:SpringCloud实现服务间调用(RestTemplate方式)
文章链接:http://soscw.com/index.php/essay/35261.html