服务消费微服务
文章目录
- 1.示意图
- 2.环境搭建
- 1.创建会员消费微服务模块
- 2.删除不必要的两个文件
- 3.检查父子模块的pom.xml文件
- 1.子模块
- 2.父模块
- 4.pom.xml 添加依赖(刷新)
- 5.application.yml 配置监听端口和服务名
- 6.com/sun/springcloud/MemberConsumerApplication.java 创建启动类测试
- 7.测试执行
- 1.发现80端口被占用
- 2.打开命令行输入 netstat -anb 查看是谁占用了80端口
- 3.只能更换端口,使用 netstat -aon | findstr :81 来查看81端口被没被占用
- 4.application.yml 更换端口和名字为81
- 5.再次测试运行,成功在81端口监听
- 6.浏览器请求测试
- 7.更换项目名称为81(这样直接就知道这个服务在81端口监听)
- 8.细节说明
- 1.如果报错说数据库有问题,可能就是在pom.xml中保留了mybatis的依赖
- 2.解决方案:启动类排除数据源自动配置
- 3.代码实现
- 1.com/sun/springcloud/entity/Member.java 创建entity与会员中心模块保持一致
- 2.com/sun/springcloud/util/Result.java 创建Result工具类
- 3.RestTemplate 基本介绍
- 4.com/sun/springcloud/config/CustomizationBean.java 配置类注入RestTemplate的bean对象
- 5.com/sun/springcloud/controller/MemberConsumerController.java 作为会员中心微服务 save接口的中转站
- 6.启动两个微服务进行测试
- 1.首先启动会员中心微服务
- 2.启动服务消费微服务
- 3.postman测试
- 4.数据库信息
- 7.注意事项
- 1.RestTemplate发送请求的细节
- 2.entity实体类需要实现Serializable接口实现可序列化
- 3.在这个案例中
- 8.com/sun/springcloud/controller/MemberConsumerController.java 新增方法
- 9.postman测试
- 10.注意事项和细节
- 1.开启Run Dashboard/Service
- 1.打开 .idea/workspace.xml
- 2.粘贴配置代码到这里
- 3.配置代码
- 4.重启项目
- 5.查看Services
- 6.可以在这启动项目
- 7.启动之后的效果
- 2.关于微服务的细节
- 1.对微服务的理解
- 2.每个微服务接口的组成
- 4.创建一个共用模块
- 1.创建公共模块 e_commerce_center-common-api
- 2.检查父子的pom.xml
- 1.子pom.xml
- 2.父pom.xml
- 3.pom.xml 引入依赖(刷新)
- 4.抽取共用api
- 5.maven打成jar包
- 6.target目录生成jar包
- 7.package和install的区别(部署项目的时候打包使用package)
- 8.工程重构
- 1.删除两个模块的Member和Result类,此时会报错
- 2.两个模块的pom.xml都引入刚才的jar包
- 1.查找公共模块jar包的坐标
- 2.pom.xml分别引入jar包
- 3.重启两个模块进行测试
- 1.重启
- 2.测试
1.示意图
2.环境搭建
1.创建会员消费微服务模块
2.删除不必要的两个文件
3.检查父子模块的pom.xml文件
1.子模块
2.父模块
4.pom.xml 添加依赖(刷新)
org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-actuator org.projectlombok lombok true org.springframework.boot spring-boot-starter-test test5.application.yml 配置监听端口和服务名
server: port: 80 # 监听80端口 spring: application: name: member-service-consumer-806.com/sun/springcloud/MemberConsumerApplication.java 创建启动类测试
package com.sun.springcloud; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** * Description: * * @Author sun * @Create 2024/3/24 13:58 * @Version 1.0 */ @SpringBootApplication public class MemberConsumerApplication { public static void main(String[] args) { SpringApplication.run(MemberConsumerApplication.class, args); } }7.测试执行
1.发现80端口被占用
2.打开命令行输入 netstat -anb 查看是谁占用了80端口
3.只能更换端口,使用 netstat -aon | findstr :81 来查看81端口被没被占用
- 没有响应,说明没有被占用
4.application.yml 更换端口和名字为81
server: port: 81 # 监听81端口 spring: application: name: member-service-consumer-815.再次测试运行,成功在81端口监听
6.浏览器请求测试
7.更换项目名称为81(这样直接就知道这个服务在81端口监听)
8.细节说明
1.如果报错说数据库有问题,可能就是在pom.xml中保留了mybatis的依赖
2.解决方案:启动类排除数据源自动配置
3.代码实现
1.com/sun/springcloud/entity/Member.java 创建entity与会员中心模块保持一致
- 因为需要使用这个实体类来接收信息,然后调用会员中心模块
package com.sun.springcloud.entity; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.io.Serializable; /** * Description: * * @Author sun * @Create 2024/3/24 14:21 * @Version 1.0 */ @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; }2.com/sun/springcloud/util/Result.java 创建Result工具类
package com.sun.springcloud.util; /** * Description: * * @Author sun * @Create 2024/3/24 14:21 * @Version 1.0 */ public class Result { 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 Result success(T data) { Result result = new Result(data); result.setCode("200"); result.setMsg("success"); return result; } public static Result success(String msg, T data) { Result 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 Result error(String code, String msg, T data) { Result result = new Result(data); result.setCode(code); result.setMsg(msg); return result; } }3.RestTemplate 基本介绍
4.com/sun/springcloud/config/CustomizationBean.java 配置类注入RestTemplate的bean对象
package com.sun.springcloud.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.client.RestTemplate; /** * Description: 配置类 * * @Author sun * @Create 2024/3/24 14:32 * @Version 1.0 */ @Configuration public class CustomizationBean { /** * 注入RestTemplate的bean对象 * @return */ @Bean public RestTemplate restTemplate() { return new RestTemplate(); } }5.com/sun/springcloud/controller/MemberConsumerController.java 作为会员中心微服务 save接口的中转站
package com.sun.springcloud.controller; import com.sun.springcloud.entity.Member; import com.sun.springcloud.util.Result; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; import javax.annotation.Resource; /** * Description: 作为会员中心微服务对member表操作的网关 * * @Author sun * @Create 2024/3/24 14:42 * @Version 1.0 */ @RestController public class MemberConsumerController { /* 访问会员中心微服务的前缀 */ public static final String MEMBER_SERVICE_PROVIDER_URL = "http://localhost:10001"; /* 注入微服务之间通讯的RestTemplate的bean对象 */ @Resource private RestTemplate restTemplate; /** * 向会员中心微服务的save接口发送请求,携带member对象,接受返回的结果Result并以json的格式返回给浏览器 * * @param member 这里的参数必须是表单类型的,因为没有加@requestBody * @return */ @PostMapping("/member/consumer/save") public Result save(Member member) { // 注意:使用restTemplate发送请求时会将member转化为json格式的数据然后再发送请求,所以会员中心微服务的save接口必须加@requestBody注解 return restTemplate.postForObject(MEMBER_SERVICE_PROVIDER_URL + "/member/save", member, Result.class); } }6.启动两个微服务进行测试
1.首先启动会员中心微服务
2.启动服务消费微服务
3.postman测试
4.数据库信息
7.注意事项
1.RestTemplate发送请求的细节
- 通过RestTemplate发送请求携带的参数会自动转换为json格式的数据
- 所以在接受RestTemplate的参数中必须要加@RequestBody注解
2.entity实体类需要实现Serializable接口实现可序列化
- 原因是使用RestTemplate传递参数时可能需要序列化
3.在这个案例中
- 参数并没有@RequestBody注解,所以需要通过表单传入数据
8.com/sun/springcloud/controller/MemberConsumerController.java 新增方法
/** * 接受id为路径参数,向会员中心微服务模块的getMemberById接口发送请求,根据id获取信息 * * @param id 请求参数 * @return 根据id返回json类型的数据 */ @GetMapping("/member/consumer/get/{id}") // 这里使用的路径参数 public Result getMemberById(@PathVariable("id") Long id) { return restTemplate.getForObject(MEMBER_SERVICE_PROVIDER_URL + "/member/get/" + id, Result.class); }9.postman测试
10.注意事项和细节
1.开启Run Dashboard/Service
1.打开 .idea/workspace.xml
2.粘贴配置代码到这里
3.配置代码
4.重启项目
5.查看Services
6.可以在这启动项目
7.启动之后的效果
2.关于微服务的细节
1.对微服务的理解
- 一个ip+端口就是一个微服务
- 访问微服务的方式是ip + 端口 + 上下文路径(可以是根目录)+ 资源路径
2.每个微服务接口的组成
- url
- 请求方式
- 参数
- 返回值
4.创建一个共用模块
1.创建公共模块 e_commerce_center-common-api
2.检查父子的pom.xml
1.子pom.xml
2.父pom.xml
3.pom.xml 引入依赖(刷新)
org.projectlombok lombok true4.抽取共用api
5.maven打成jar包
6.target目录生成jar包
7.package和install的区别(部署项目的时候打包使用package)
- 参数并没有@RequestBody注解,所以需要通过表单传入数据
- 原因是使用RestTemplate传递参数时可能需要序列化
- 因为需要使用这个实体类来接收信息,然后调用会员中心模块
- 没有响应,说明没有被占用
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!




































