创建服务提供者工程

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

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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.gitee</groupId>
<artifactId>spring-cloud-alibaba-service-member</artifactId>
<version>0.0.1</version> <dependencyManagement>
<dependencies>
<!-- spring boot 依赖 -->
<dependency>
<groupId>com.gitee</groupId>
<artifactId>spring-cloud-alibaba-version-parent</artifactId>
<version>${project.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement> <dependencies>
<!-- 公共模块 -->
<dependency>
<groupId>com.gitee</groupId>
<artifactId>spring-cloud-alibaba-common</artifactId>
<version>${project.version}</version>
</dependency>
<!-- web服务 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- undertow服务器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
<!-- 参数校验 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<!-- nacos 服务治理 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- nacos 配置中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- 负载均衡 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<!-- 使用 bootstrap -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
</dependencies>
</project>

MemberServiceApplication.java 启动类

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.web.bind.annotation.RestController; /**
* 会员中心服务启动类
*
* @author wentao.wu
*/
@RestController
@EnableDiscoveryClient
@SpringBootApplication
public class MemberServiceApplication {
public static void main(String[] args) {
SpringApplication.run(MemberServiceApplication.class, args);
}
}

Bootstrap.yaml

server:
port: 8081
spring:
application:
name: service-member
cloud:
nacos:
discovery:
server-addr: localhost:8848
metadata:
version: 0.0.1
appname: ${spring.application.name}
#指定命名空间 对应dev环境
namespace: 7e3699fa-09eb-4d47-8967-60f6c98da94a
#指定分组 案例组
group: EXAMPLE-GROUP
#指定集群环境 华南
cluster-name: HuaNan
config:
server-addr: localhost:8848
#指定命名空间 对应dev环境
namespace: 7e3699fa-09eb-4d47-8967-60f6c98da94a
#指定分组 案例组
group: EXAMPLE-GROUP
#指定集群环境 华南
cluster-name: HuaNan
#指定配置文件的类型,默认是properties
file-extension: properties
#前缀${spring.application.name}
prefix: service-user

MemberInfoController.java 会员信息获取接口

/**
* 会员信息接口
*
* @author wentao.wu
*/
@RestController
@RequestMapping("/member/info")
public class MemberInfoController {
/**
* 获取用户会员信息
*
* @param username
* @return
*/
@GetMapping("/getUserMember/{username}")
public Response<Map<String, Object>> getUserMember(@PathVariable("username") String username) {
Response<Map<String, Object>> response = new Response<>();
response.setCode("1");
response.setMsg("获取会员信息成功!"); //从数据库根据用户查询会员信息
Map<String, Object> result = new HashMap<>();
result.put("level", "vip1");
result.put("username", username);
response.setResult(result);
return response;
}
}

使用RestTemplate进行消费

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

增加RestTemplate注入配置

RestTemplateConfig.java

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate; /**
* RestTample配置
*/
@Configuration
public class RestTemplateConfig {
/**
* 注入RestTample模板并且开启负载均衡
*/
@Bean
@LoadBalanced
public RestTemplate getRestTample(){
return new RestTemplate();
}
}

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

增加RestTamplteConsumerController.java

import java.util.HashMap;
import java.util.Map; /**
* rest template consumer
*
* @author wentao.wu
*/
@RestController
@RequestMapping("/rest/consumer")
public class RestTamplteConsumerController {
@Autowired
private RestTemplate restTemplate;
@Autowired
private LoadBalancerClient loadBalancerClient; @GetMapping("/getUserInfo/{username}")
public Response<Map<String, Object>> getUserInfo(@PathVariable("username") String username) {
// 通过的负载均衡接口获取服务实例信息
ServiceInstance serviceInstance = loadBalancerClient.choose("service-member");
String url = "http://" + serviceInstance.getServiceId() + ":" + serviceInstance.getPort() + "/member/info/getUserMember/" + username;
String result = restTemplate.getForObject(url, String.class);
Response<Map<String, Object>> response = (Response<Map<String, Object>>) JSONObject.parse(result);
Map<String,Object> userinfo = new HashMap<>();
userinfo.put("userage","100");
userinfo.put("email","xxx@email.com");
response.getResult().putAll(userinfo);
response.setMsg("获取用户信息成功!");
return response;
} }

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

{
"code": "1",
"msg": "获取会员信息成功!",
"errorCode": null,
"errorMsg": null,
"result": {
"level": "vip1",
"userage": "100",
"email": "xxx@email.com",
"username": "zhangsan"
}
}

以上代码通过负载均衡客户端获取到会员服务的一个实例并且使用实例的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. linux设置防火墙规则-指定ip的访问权限

    vim /etc/sysconfig/iptables 可以把你当前的iptables规则放到/etc/sysconfig/iptables中,系统重启iptables时自动执行 1.查看 iptab ...

  2. Nginx系列(7)- Nginx安装 | Linux

    step-1 安装gcc 安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,则需要安装: [root@localhost ~]# yum install ...

  3. 博客主题——element v2

    主题预览 主题下载 gshang.element-v2.rar

  4. java 工具类 验证码

    第一步: 引入工具类 工具类一: import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import jav ...

  5. Sql 小技巧(持续汇总)

    身份证号加密 select concat(left(`visitors`.`Card_id`,3),'****',right(`visitors`.`Card_id`,4)) AS `Card_id` ...

  6. NOI.AC#2144-子串【SAM,倍增】

    正题 题目链接:http://noi.ac/problem/2144 题目大意 给出一个字符串\(s\)和一个序列\(a\).将字符串\(s\)的所有本质不同子串降序排序后,求有多少个区间\([l,r ...

  7. ASP.NET Core 学习笔记 第二篇 依赖注入

    前言 ASP.NET Core 应用在启动过程中会依赖各种组件提供服务,而这些组件会以接口的形式标准化,这些组件这就是我们所说的服务,ASP.NET Core框架建立在一个底层的依赖注入框架之上,它使 ...

  8. Midway Serverless 发布 2.0,一体化让前端研发再次提效

    作者 | 张挺 来源 | Serverless 公众号 自去年 Midway Serverless 1.0 发布之后,许多业务开始尝试其中,并利用 Serverless 容器的弹性能力,减少了大量研发 ...

  9. js 改变this指向的三种方法 bind call apply

    先了解下bind call apply 的注意点 bind 需要手动调用 第一个参数 this 要指向的对象,后面是 散列的参数 call 不需要手动调用 第一个参数 this 要指向的对象,后面是 ...

  10. 洛谷P7078 [CSP-S2020] 贪吃蛇 题解

    比赛里能做出这题的人真的非常厉害,至少他的智商和蛇一样足够聪明. 首先有一个结论: 当前最强的蛇吃了最弱的蛇之后,如果没有变成最弱的蛇,他一定会选择吃! 证明: 假设当前最强的蛇叫石老板. 如果下一条 ...