前言
本篇博文是关于Spring Cloud–从零开始搭建微服务基础环境【三】,希望你能够喜欢
个人主页:晨犀主页
个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我的动力
欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,感谢大家的观看
如果文章有什么需要改进的地方还请大佬不吝赐教 先在此感谢啦
示意图
-浏览器: http://localhost/member/consumer/get/1
测试添加会员: http://localhost/member/consumer/save
1、创建Moduel(member-service-consumer-80) & 完成配置
2、创建controller
3、完成测试
由于创建模块步骤一致,这里不做描述。
创建模块完成后,父工程的pom.xml-会做相应变化,管理member-service-consumer-80 微服务子模块
<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">
<parent>
<artifactId>e-commerce-centerartifactId>
<groupId>com.my.springcloudgroupId>
<version>1.0-SNAPSHOTversion>
parent>
<modelVersion>4.0.0modelVersion>
<artifactId>member-service-consumer-80artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-zipkinartifactId>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-actuatorartifactId>
dependency>
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
dependency>
<dependency>
<groupId>com.my.springcloudgroupId>
<artifactId>e_commerce_center-common-apiartifactId>
<version>${project.version}version>
dependency>
dependencies>
project>
server:
port: 80
@SpringBootApplication
public class MemberConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(MemberConsumerApplication.class,args);
}
}
@AllArgsConstructor
@NoArgsConstructor
@Data
//Serializable 加上,后面可能使用
public class Member implements Serializable {
private Long id;
private String name;
private String pwd;
private String mobile;
private String email;
private Integer gender;
}
创建com/my/springcloud/entity/Result.java
/**
* 1. 用于返回结果, 利于json 格式
* 2. 这个工具类, 在网上也可找到
*/
public class Result<T> {
private String code;
private String msg;
private T data;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public Result() {
}
public Result(T data) {
this.data = data;
}
public static Result success() {
Result result = new Result<>();
result.setCode("200");
result.setMsg("success");
return result;
}
public static <T> Result<T> success(T data) {
Result<T> result = new Result<>(data);
result.setCode("200");
result.setMsg("success");
return result;
}
public static <T> Result<T> success(String msg, T data) {
Result<T> result = new Result<>(data);
result.setCode("200");
result.setMsg(msg);
return result;
}
public static Result error(String code, String msg) {
Result result = new Result();
result.setCode(code);
result.setMsg(msg);
return result;
}
public static <T> Result<T> error(String code, String msg, T data) {
Result<T> result = new Result<>(data);
result.setCode(code);
result.setMsg(msg);
return result;
}
}
1、RestTemplate 是Spring 提供的用于访问Rest 服务的模板类。
2、RestTemplate 提供了多种便捷访问远程Http 服务的方法。
3、说明:小伙伴可以这样理解, 通过RestTemplate, 我们可以发出http 请求(支持Restful 风格), 去调用Controller 提供的API 接口, 就像我们使用浏览器发出http 请求,调用该API 接口一样。
4、使用简单便捷。
官网及使用
官网地址:https://docs.spring.io/spring-framework/docs/5.2.2.RELEASE/javadoc-api/org/springframework/web/client/RestTemplate.html
创建配置类: com/my/springcloud/config/CustomizationBean.java
@Configuration
public class CustomizationBean {
//说明: 配置注入RestTemplate bean/对象
//这里的@LoadBalanced 就是赋予 RestTemplate 负载均衡的能力
//默认是使用轮询算法来访问远程调用接口/地址
@Bean
@LoadBalanced
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
创建:com/my/springcloud/controller/MemberConsumerController.java
@RestController
@Slf4j
public class MemberConsumerController {
//定义member_service_provider_url 这是一个基础url地址
//使用shift+ctrl+u 进行字母大小写的切换
/**
* 说明:
* 1. MEMBER-SERVICE-PROVIDER 就是服务提供方[集群], 注册到Eureka Server 的名称
* 2. 也就是服务提供方[集群]对外暴露的名称为 MEMBER-SERVICE-PROVIDER
* 3. MEMBER-SERVICE-PROVIDER 目前有 两个 Availability Zones member-service-provider:10000
* 还有一个 member-service-provider:10002
* 需要增加一个注解@LoadBalanced 赋予 RestTemplate 负载均衡的能力,也就是会根据你的负载均衡算法
* 来选择某个服务去访问, 默认是轮询算法, 当然我们也可以自己配置负载均衡算法
*/
public static final String MEMBER_SERVICE_PROVIDER_URL =
"http://MEMBER-SERVICE-PROVIDER"; //后面这里地方会修改成提供服务模块的注册别名
//装配RestTemplate bean/对象
@Resource
private RestTemplate restTemplate;
//方法/接口 添加member对象到数据库/表
//说明: 这还有一个坑, 一会就解决.
@PostMapping("/member/consumer/save")
public Result<Member> save(Member member) {
log.info("service-consumer member={}", member);
//说明
//请的完整的url :MEMBER_SERVICE_PROVIDER_URL + "/member/save" => http://localhost:10000/member/save
//member : 就是通过restTemplate 发出的post请求携带数据(对象)
//Result.class: 返回对象类型
//这里通过restTemplate 调用服务提供模块的接口, 就是一个远程调用 RPC
return restTemplate.postForObject(MEMBER_SERVICE_PROVIDER_URL
+ "/member/save", member, Result.class);
}
//方法/接口 , 根据id 调用服务接口,返回member对象信息
@GetMapping("/member/consumer/get/{id}")
public Result<Member> getMemberById(@PathVariable("id") Long id) {
return restTemplate.getForObject(
MEMBER_SERVICE_PROVIDER_URL + "/member/get/" + id, Result.class);
}
}
浏览器: http://localhost/member/consumer/get/1
springBoot 启动If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
//加入排除DataSourceAutoConfiguration 自动配置
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class MemberConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(MemberConsumerApplication.class, args);
}
}
通过网络发送相当于流的形式,底层会重新变成对象以json形式传播,不做处理就会添加空。需要通过序列化发送才能反序列化恢复
当springcloud 的服务有多个时,管理多个服务的启动使用run 会不好管理,这样我们就可以使用Run Dashboard。
新版的2020 的IDEA 当你同时启动两个微服务时,不会弹出启动Run Dashboard 窗口的提示,是因为IDEA2020 将Run Dashboard 添加到控制台Service 中
提醒: 不同版本的IDEA 开启Run DashBoard 有区别,如果和这里IDEA 版本不同,百度下解决。
文章到这里就结束了,如果有什么疑问的地方请指出,诸大佬们一起来评论区一起讨论
希望能和诸大佬们一起努力,今后我们一起观看感谢您的阅读
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力