Spring Cloud Alibaba 使用RestTemplate进行服务消费
创建服务提供者工程
创建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进行服务消费的更多相关文章
- Spring Cloud Alibaba(2)---RestTemplate微服务项目
RestTemplate微服务项目 前言 因为要运用 Spring Cloud Alibaba 开源组件到分布式项目中,所以这里先搭建一个不通过 Spring Cloud只通过 RestTemplat ...
- Spring Cloud Alibaba 使用Feign进行服务消费
为什么使用Feign? Feign可以把Rest的请求进行隐藏,伪装成类似SpringMVC的Controller一样.你不用再自己拼接url,拼接参数等等操作,一切都交给Feign去做. 使用Fei ...
- Spring Cloud Alibaba+Nacos搭建微服务架构
1. Spring Cloud Alibaba 简介 Spring Cloud Alibaba是阿里巴巴为分布式应用提供的一站式解决方案,能够更方便快捷地搭建分布式平台,nacos拥有着替换eu ...
- 阿里巴巴开源 Spring Cloud Alibaba,加码微服务生态建设
本周,Spring Cloud联合创始人Spencer Gibb在Spring官网的博客页面宣布:阿里巴巴开源 Spring Cloud Alibaba,并发布了首个预览版本.随后,Spring Cl ...
- Spring Cloud Alibaba 实战 之 Nacos 服务注册和发现
服务注册与发现,服务发现主要用于实现各个微服务实例的自动化注册与发现,是微服务治理的核心,学习 Spring Cloud Alibaba,首先要了解框架中的服务注册和发现组件——Nacos. 一.Sp ...
- Spring Cloud Alibaba系列之分布式服务组件Dubbo
本博客的例子代码可以在github找到下载链接:代码下载 SpringBoot.SpringCloud Alibaba系列博客专栏:链接 1.分布式理论 1.1.分布式基本定义 <分布式系统原理 ...
- Spring Cloud Alibaba 整合 Nacos 实现服务配置中心
在之前的文章 <Nacos 本地单机版部署步骤和使用> 中,大家应该了解了 Nacos 是什么?其中 Nacos 提供了动态配置服务功能 一.Nacos 动态配置服务是什么? 官方是这么说 ...
- Spring Cloud Alibaba 使用Nacos作为服务注册中心
为什么需要注册中心? 在分布式架构中,服务会注册到这里,当服务需要调用其它服务时,就到这里找到服务的地址,进行调用:服务管理,核心是有个服务注册表,心跳机制动态维护 : 服务注册 创建普通Spring ...
- Spring Cloud Alibaba 介绍及工程准备
简介 SpringCloud Alibaba是阿里巴巴集团开源的一套微服务架构解决方案. 微服务架构是为了更好的分布式系统开发,将一个应用拆分成多个子应用,每一个服务都是可以独立运行的子工程.其中涵盖 ...
随机推荐
- switchery插件:多个按钮,用jquery进行切换
单个按钮可以参照这个链接https://blog.csdn.net/u012233776/article/details/53305846 多个按钮时, html中其中想操作这个按钮开启与关闭 < ...
- 解决dede编辑器不能保存word文档样式问题
ckeditor在dede里不能保存样式,试过多种解决办法都还是没有解决.最终将编辑器换成FCK得到解决. 第一步:下载FCK编辑器 下载地址: 链接: http://pan.baidu.com/s/ ...
- requests入门大全
02 requests接口测试-requests的安装 安装常见问题 提示连接不上,443问题 一般是因为浏览器设置了代理,关闭代理. 网络加载慢,设置国内镜像地址 1.pip安装 2.pycharm ...
- java 小算法
//鸡兔同笼 20个头 58腿 for(int a=0;a<=20;a++) { int b = 20-a; if((2*b+4*a)==58) { System.out.println(a+& ...
- [转载]linux环境变量设置方法总结(PATH/LD_LIBRARY_PATH)
http://blog.chinaunix.net/uid-354915-id-3568853.html PATH: 可执行程序的查找路径查看当前环境变量:echo $PATH设置: 方法一:exp ...
- CF708E-Student‘s Camp【数学期望,dp】
正题 题目链接:https://www.luogu.com.cn/problem/CF708E 题目大意 有\(n*m\)的矩形网格,然后每次每行最左边和最右边的格子各有\(p=\frac{c}{d} ...
- IDEA连接Mysql数据库之后,在Mapper.xml编写SQL时不会自动提示表信息问题(非常详细!)
1.首先得连接上数据库 (一)点击IDEA右侧数据库模块 (二)选择MySql进行连接 (三)填写数据库相关配置 (四)重点!!! 这个时候点击测试连接是连接不上的,需要设置时区 (按照如下设置) ( ...
- 全网最新最详细最明白教程之Spring源码搭建,没有之一,超详细
相关帖子有很多但是都不是最新的Gradle,我在使用Gradle最新版编译的时候简直坑死我了,弄了好久.接下来给大家详细说一下这个安装过程,以及相关的软件版本号. 相关软件.依赖的版本号: Gradl ...
- 运用shapefile.js解析Shp文件
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...
- GoLang设计模式10 - 中介者模式
中介者模式是一种行为型设计模式.在中介者模式中创建了一个中介对象来负责不同类间的通信.因为这些类不需要直接交互,所以也就能避免它们之间的直接依赖,实现解耦的效果. 中介者模式的一个典型案例是老式小火车 ...