创建服务提供者工程

创建spring-cloud-alibaba-service-member工程,会员中心服务该服务提供用户会员信息。

pom.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <groupId>com.gitee</groupId>
  7. <artifactId>spring-cloud-alibaba-service-member</artifactId>
  8. <version>0.0.1</version>
  9. <dependencyManagement>
  10. <dependencies>
  11. <!-- spring boot 依赖 -->
  12. <dependency>
  13. <groupId>com.gitee</groupId>
  14. <artifactId>spring-cloud-alibaba-version-parent</artifactId>
  15. <version>${project.version}</version>
  16. <type>pom</type>
  17. <scope>import</scope>
  18. </dependency>
  19. </dependencies>
  20. </dependencyManagement>
  21. <dependencies>
  22. <!-- 公共模块 -->
  23. <dependency>
  24. <groupId>com.gitee</groupId>
  25. <artifactId>spring-cloud-alibaba-common</artifactId>
  26. <version>${project.version}</version>
  27. </dependency>
  28. <!-- web服务 -->
  29. <dependency>
  30. <groupId>org.springframework.boot</groupId>
  31. <artifactId>spring-boot-starter-web</artifactId>
  32. <exclusions>
  33. <exclusion>
  34. <groupId>org.springframework.boot</groupId>
  35. <artifactId>spring-boot-starter-tomcat</artifactId>
  36. </exclusion>
  37. </exclusions>
  38. </dependency>
  39. <!-- undertow服务器 -->
  40. <dependency>
  41. <groupId>org.springframework.boot</groupId>
  42. <artifactId>spring-boot-starter-undertow</artifactId>
  43. </dependency>
  44. <!-- 参数校验 -->
  45. <dependency>
  46. <groupId>org.springframework.boot</groupId>
  47. <artifactId>spring-boot-starter-validation</artifactId>
  48. </dependency>
  49. <!-- nacos 服务治理 -->
  50. <dependency>
  51. <groupId>com.alibaba.cloud</groupId>
  52. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  53. </dependency>
  54. <!-- nacos 配置中心 -->
  55. <dependency>
  56. <groupId>com.alibaba.cloud</groupId>
  57. <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  58. </dependency>
  59. <!-- 负载均衡 -->
  60. <dependency>
  61. <groupId>org.springframework.cloud</groupId>
  62. <artifactId>spring-cloud-starter-loadbalancer</artifactId>
  63. </dependency>
  64. <!-- 使用 bootstrap -->
  65. <dependency>
  66. <groupId>org.springframework.cloud</groupId>
  67. <artifactId>spring-cloud-starter-bootstrap</artifactId>
  68. </dependency>
  69. </dependencies>
  70. </project>

MemberServiceApplication.java 启动类

  1. import org.springframework.boot.SpringApplication;
  2. import org.springframework.boot.autoconfigure.SpringBootApplication;
  3. import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
  4. import org.springframework.cloud.openfeign.EnableFeignClients;
  5. import org.springframework.web.bind.annotation.RestController;
  6. /**
  7. * 会员中心服务启动类
  8. *
  9. * @author wentao.wu
  10. */
  11. @RestController
  12. @EnableDiscoveryClient
  13. @SpringBootApplication
  14. public class MemberServiceApplication {
  15. public static void main(String[] args) {
  16. SpringApplication.run(MemberServiceApplication.class, args);
  17. }
  18. }

Bootstrap.yaml

  1. server:
  2. port: 8081
  3. spring:
  4. application:
  5. name: service-member
  6. cloud:
  7. nacos:
  8. discovery:
  9. server-addr: localhost:8848
  10. metadata:
  11. version: 0.0.1
  12. appname: ${spring.application.name}
  13. #指定命名空间 对应dev环境
  14. namespace: 7e3699fa-09eb-4d47-8967-60f6c98da94a
  15. #指定分组 案例组
  16. group: EXAMPLE-GROUP
  17. #指定集群环境 华南
  18. cluster-name: HuaNan
  19. config:
  20. server-addr: localhost:8848
  21. #指定命名空间 对应dev环境
  22. namespace: 7e3699fa-09eb-4d47-8967-60f6c98da94a
  23. #指定分组 案例组
  24. group: EXAMPLE-GROUP
  25. #指定集群环境 华南
  26. cluster-name: HuaNan
  27. #指定配置文件的类型,默认是properties
  28. file-extension: properties
  29. #前缀${spring.application.name}
  30. prefix: service-user

MemberInfoController.java 会员信息获取接口

  1. /**
  2. * 会员信息接口
  3. *
  4. * @author wentao.wu
  5. */
  6. @RestController
  7. @RequestMapping("/member/info")
  8. public class MemberInfoController {
  9. /**
  10. * 获取用户会员信息
  11. *
  12. * @param username
  13. * @return
  14. */
  15. @GetMapping("/getUserMember/{username}")
  16. public Response<Map<String, Object>> getUserMember(@PathVariable("username") String username) {
  17. Response<Map<String, Object>> response = new Response<>();
  18. response.setCode("1");
  19. response.setMsg("获取会员信息成功!");
  20. //从数据库根据用户查询会员信息
  21. Map<String, Object> result = new HashMap<>();
  22. result.put("level", "vip1");
  23. result.put("username", username);
  24. response.setResult(result);
  25. return response;
  26. }
  27. }

使用RestTemplate进行消费

使用前面文章创建的用户中心服务spring-cloud-alibaba-service-user进行服务消费。

增加RestTemplate注入配置

RestTemplateConfig.java

  1. import org.springframework.cloud.client.loadbalancer.LoadBalanced;
  2. import org.springframework.context.annotation.Bean;
  3. import org.springframework.context.annotation.Configuration;
  4. import org.springframework.web.client.RestTemplate;
  5. /**
  6. * RestTample配置
  7. */
  8. @Configuration
  9. public class RestTemplateConfig {
  10. /**
  11. * 注入RestTample模板并且开启负载均衡
  12. */
  13. @Bean
  14. @LoadBalanced
  15. public RestTemplate getRestTample(){
  16. return new RestTemplate();
  17. }
  18. }

获取用户信息同时包含用户会员信息

增加RestTamplteConsumerController.java

  1. import java.util.HashMap;
  2. import java.util.Map;
  3. /**
  4. * rest template consumer
  5. *
  6. * @author wentao.wu
  7. */
  8. @RestController
  9. @RequestMapping("/rest/consumer")
  10. public class RestTamplteConsumerController {
  11. @Autowired
  12. private RestTemplate restTemplate;
  13. @Autowired
  14. private LoadBalancerClient loadBalancerClient;
  15. @GetMapping("/getUserInfo/{username}")
  16. public Response<Map<String, Object>> getUserInfo(@PathVariable("username") String username) {
  17. // 通过的负载均衡接口获取服务实例信息
  18. ServiceInstance serviceInstance = loadBalancerClient.choose("service-member");
  19. String url = "http://" + serviceInstance.getServiceId() + ":" + serviceInstance.getPort() + "/member/info/getUserMember/" + username;
  20. String result = restTemplate.getForObject(url, String.class);
  21. Response<Map<String, Object>> response = (Response<Map<String, Object>>) JSONObject.parse(result);
  22. Map<String,Object> userinfo = new HashMap<>();
  23. userinfo.put("userage","100");
  24. userinfo.put("email","xxx@email.com");
  25. response.getResult().putAll(userinfo);
  26. response.setMsg("获取用户信息成功!");
  27. return response;
  28. }
  29. }

请求用户服务获取信息:http://localhost:8080/rest/consumer/getUserInfo/zhangsan 返回值为

  1. {
  2. "code": "1",
  3. "msg": "获取会员信息成功!",
  4. "errorCode": null,
  5. "errorMsg": null,
  6. "result": {
  7. "level": "vip1",
  8. "userage": "100",
  9. "email": "xxx@email.com",
  10. "username": "zhangsan"
  11. }
  12. }

以上代码通过负载均衡客户端获取到会员服务的一个实例并且使用实例的ip与端口拼接成一个请求路径,并且带上具体访问的请求地址对会员服务进行请求,请求到会员信息后将会员信息与用户信息合并返回到前端。

源码代码存放地址

gitee: https://gitee.com/SimpleWu/spring-cloud-alibaba-example.git

cnblogs: https://www.cnblogs.com/SimpleWu

持续更新目录:https://www.cnblogs.com/SimpleWu/p/15476427.html

Spring Cloud Alibaba 使用RestTemplate进行服务消费的更多相关文章

  1. Spring Cloud Alibaba(2)---RestTemplate微服务项目

    RestTemplate微服务项目 前言 因为要运用 Spring Cloud Alibaba 开源组件到分布式项目中,所以这里先搭建一个不通过 Spring Cloud只通过 RestTemplat ...

  2. Spring Cloud Alibaba 使用Feign进行服务消费

    为什么使用Feign? Feign可以把Rest的请求进行隐藏,伪装成类似SpringMVC的Controller一样.你不用再自己拼接url,拼接参数等等操作,一切都交给Feign去做. 使用Fei ...

  3. Spring Cloud Alibaba+Nacos搭建微服务架构

    1. Spring Cloud Alibaba 简介    Spring Cloud Alibaba是阿里巴巴为分布式应用提供的一站式解决方案,能够更方便快捷地搭建分布式平台,nacos拥有着替换eu ...

  4. 阿里巴巴开源 Spring Cloud Alibaba,加码微服务生态建设

    本周,Spring Cloud联合创始人Spencer Gibb在Spring官网的博客页面宣布:阿里巴巴开源 Spring Cloud Alibaba,并发布了首个预览版本.随后,Spring Cl ...

  5. Spring Cloud Alibaba 实战 之 Nacos 服务注册和发现

    服务注册与发现,服务发现主要用于实现各个微服务实例的自动化注册与发现,是微服务治理的核心,学习 Spring Cloud Alibaba,首先要了解框架中的服务注册和发现组件——Nacos. 一.Sp ...

  6. Spring Cloud Alibaba系列之分布式服务组件Dubbo

    本博客的例子代码可以在github找到下载链接:代码下载 SpringBoot.SpringCloud Alibaba系列博客专栏:链接 1.分布式理论 1.1.分布式基本定义 <分布式系统原理 ...

  7. Spring Cloud Alibaba 整合 Nacos 实现服务配置中心

    在之前的文章 <Nacos 本地单机版部署步骤和使用> 中,大家应该了解了 Nacos 是什么?其中 Nacos 提供了动态配置服务功能 一.Nacos 动态配置服务是什么? 官方是这么说 ...

  8. Spring Cloud Alibaba 使用Nacos作为服务注册中心

    为什么需要注册中心? 在分布式架构中,服务会注册到这里,当服务需要调用其它服务时,就到这里找到服务的地址,进行调用:服务管理,核心是有个服务注册表,心跳机制动态维护 : 服务注册 创建普通Spring ...

  9. Spring Cloud Alibaba 介绍及工程准备

    简介 SpringCloud Alibaba是阿里巴巴集团开源的一套微服务架构解决方案. 微服务架构是为了更好的分布式系统开发,将一个应用拆分成多个子应用,每一个服务都是可以独立运行的子工程.其中涵盖 ...

随机推荐

  1. TP5开启缓存

    https://www.kancloud.cn/manual/thinkphp5/215850 V5.0.6+版本开始,全局请求缓存支持设置排除规则,使用方法如下:config.php文件 'requ ...

  2. 【Azure 应用服务】App Service For Linux 部署PHP Laravel 项目,如何修改首页路径为 wwwroot\public\index.php

    问题描述 参考官方文档部署 PHP Laravel 项目到App Service for Linux环境中,但是访问应用时候遇见了500 Server Error 错误. 从部署的日志中,可以明确看出 ...

  3. Shell系列(38)- 数组操作→取值、遍历、替换、删除

    引言 在Linux平台上工作,我们经常需要使用shell来编写一些有用.有意义的脚本程序.有时,会经常使用shell数组.那么,shell中的数组是怎么表现的呢,又是怎么定义的呢?接下来逐一的进行讲解 ...

  4. 剑指offer计划25(模拟中等)---java

    1.1.题目1 剑指 Offer 29. 顺时针打印矩阵 1.2.解法 常规开头,先判断特殊情况,然后创建四个变量存放矩阵四边的长度限制. 创建res数组存放结果. 循坏开始,遍历完一行或者一列,就将 ...

  5. springboot 运行出现错误 Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean.

    原因是我将springboot启动类换到了另外一个方法中 出现了一个异常 后来发现因为我换了类但是忘记了换类名所以才报错 @ComponentScan @EnableAutoConfiguration ...

  6. 搞定 NodeJS 开发调试

    代码调试有时候是一种充满挑战的工作,如果有一个趁手的调试工具的话,往往可以做到事半功倍的效果.得益于这些年的快速发展,在 NodeJS 生态中已经有了多种调试工具可以使用.我们今年就来分享几个常用的调 ...

  7. Loj#2769-「ROI 2017 Day 1」前往大都会【最短路树,斜率优化】

    正题 题目链接:https://loj.ac/p/2769 题目大意 给出\(n\)个点\(m\)条地铁线路,每条线路是一条路径. 求\(1\)到\(n\)的最短路且在最短路径的情况下相邻换乘点的距离 ...

  8. K8ssandra入门-详细记录在Linux上部署K8ssandra到Kubernetes

    1 什么是K8ssandra Cassandra是一款非常优秀的开源的分布式NoSQL数据库,被许多优秀的大公司采用,具有高可用.弹性扩展.性能好等特点. 正应Cassandra的优势,我们经常需要在 ...

  9. spring-data-redis 上百万的 QPS 压力太大连接失败,我 TM 人傻了

    大家好,我们最近业务量暴涨,导致我最近一直 TM 人傻了.前几天晚上,发现由于业务压力激增,某个核心微服务新扩容起来的几个实例,在不同程度上,出现了 Redis 连接失败的异常: org.spring ...

  10. 题解 [POI2013]SPA-Walk

    题目传送门 题目大意 给出两个长度为 \(n\) 的 \(01\) 串,问是否可以通过某一位把 \(s\) 变为 \(t\),但是中途不能变为 \(k\) 个 \(01\) 串中任意一个,问是否可行. ...