淄博做网站的公司,网站建设课程体系,新网站上线,微信推广引流平台Rest环境搭建#xff1a;服务提供者和消费者
4.1 介绍
我们会使用一个Dept部门模块做一个微服务通用案例Consumer消费者(Client)通过REST调用Provider提供者(Server)提供的服务。回顾Spring#xff0c;SpringMVC#xff0c;Mybatis等以往学习的知识。Maven的分包分模块架构…Rest环境搭建服务提供者和消费者
4.1 介绍
我们会使用一个Dept部门模块做一个微服务通用案例Consumer消费者(Client)通过REST调用Provider提供者(Server)提供的服务。回顾SpringSpringMVCMybatis等以往学习的知识。Maven的分包分模块架构复习。
一个简单的Maven模块结构是这样的-- app-parent: 一个父项目(app-parent)聚合了很多子项目(app-util\app-dao\app-web...)|-- pom.xml||-- app-core||---- pom.xml||-- app-web||---- pom.xml......一个父工程带着多个Moudule子模块
MicroServiceCloud父工程(Project)下初次带着3个子模块(Module)
microservicecloud-api 【封装的整体entity/接口/公共配置等】microservicecloud-consumer-dept-80 【服务消费者】microservicecloud-provider-dept-8001 【服务提供者】
版本选择
大版本说明
SpringBootSpringCloud关系1.2.xAngel版本(天使)兼容SpringBoot1.2x1.3.xBrixton版本(布里克斯顿)兼容SpringBoot1.3x也兼容SpringBoot1.4x1.4.xCamden版本(卡姆登)兼容SpringBoot1.4x也兼容SpringBoot1.5x1.5.xDalston版本(多尔斯顿)兼容SpringBoot1.5x不兼容SpringBoot2.0x1.5.xEdgware版本(埃奇韦尔)兼容SpringBoot1.5x不兼容SpringBoot2.0x2.0.xFinchley版本(芬奇利)兼容SpringBoot2.0x不兼容SpringBoot1.5x2.1.xGreenwich版本(格林威治)
实际开发版本关系
spring-boot-starter-parentspring-cloud-dependencles版本号发布日期版本号发布日期1.5.2.RELEASE2017-03Dalston.RC12017-x1.5.9.RELEASE2017-11Edgware.RELEASE2017-111.5.16.RELEASE2018-04Edgware.SR52018-101.5.20.RELEASE2018-09Edgware.SR52018-102.0.2.RELEASE2018-05Fomchiey.BULD-SNAPSHOT2018-x2.0.6.RELEASE2018-10Fomchiey-SR22018-102.1.4.RELEASE2019-04Greenwich.SR12019-03
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zr7qtaGV-1610696537728)(C:\Users\王东梁\AppData\Roaming\Typora\typora-user-images\image-20210114191102105.png)]
使用后两个
创建父工程
新建父工程项目springcloud切记Packageing是pom模式主要是定义POM文件将后续各个子模块公用的jar包等统一提取出来类似一个抽象父类
pom.xml
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.haust/groupIdartifactIdspringcloud/artifactIdversion1.0-SNAPSHOT/versionmodulesmodulespringcloud-api/modulemodulespringcloud-provider-dept-8001/modulemodulespringcloud-consumer-dept-80/modulemodulespringcloud-eureka-7001/modulemodulespringcloud-eureka-7002/modulemodulespringcloud-eureka-7003/modulemodulespringcloud-provider-dept-8002/modulemodulespringcloud-provider-dept-8003/modulemodulespringcloud-consumer-dept-feign/modulemodulespringcloud-provider-dept-hystrix-8001/modulemodulespringcloud-consumer-hystrix-dashboard/modulemodulespringcloud-zuul-9527/modulemodulespringcloud-config-server-3344/modulemodulespringcloud-config-client-3355/modulemodulespringcloud-config-eureka-7001/modulemodulespringcloud-config-dept-8001/module/modules!--打包方式 pom--packagingpom/packagingpropertiesproject.build.sourceEncodingUTF-8/project.build.sourceEncodingmaven.compiler.source1.8/maven.compiler.sourcemaven.compiler.target1.8/maven.compiler.targetjunit.version4.12/junit.versionlog4j.version1.2.17/log4j.versionlombok.version1.16.18/lombok.version/propertiesdependencyManagementdependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-alibaba-dependencies/artifactIdversion0.2.0.RELEASE/versiontypepom/typescopeimport/scope/dependency!--springCloud的依赖--dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-dependencies/artifactIdversionGreenwich.SR1/versiontypepom/typescopeimport/scope/dependency!--SpringBoot--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-dependencies/artifactIdversion2.1.4.RELEASE/versiontypepom/typescopeimport/scope/dependency!--数据库--dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion5.1.47/version/dependencydependencygroupIdcom.alibaba/groupIdartifactIddruid/artifactIdversion1.1.10/version/dependency!--SpringBoot 启动器--dependencygroupIdorg.mybatis.spring.boot/groupIdartifactIdmybatis-spring-boot-starter/artifactIdversion1.3.2/version/dependency!--日志测试~--dependencygroupIdch.qos.logback/groupIdartifactIdlogback-core/artifactIdversion1.2.3/version/dependencydependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion${junit.version}/version/dependencydependencygroupIdlog4j/groupIdartifactIdlog4j/artifactIdversion${log4j.version}/version/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion${lombok.version}/version/dependency/dependencies/dependencyManagement/project父工程为springcloud其下有多个子mudule详情参考完整代码了解 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ph2yN66N-1610696537730)(C:\Users\王东梁\AppData\Roaming\Typora\typora-user-images\image-20210114203950885.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vbj1pl9v-1610696537733)(C:\Users\王东梁\AppData\Roaming\Typora\typora-user-images\image-20210114205910420.png)]
springcloud-provider-dept-8001提供者
server:port: 8001
mybatis:type-aliases-package: com.kuang.springcloud.pojoconfig-location: classpath:mybatis/mapper-config.xmlmapper-locations: classpath:mybatis/mapper/*.xml# spring配置
spring:application:name: springcloud-provider-deptdatasource:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/db01?userSSLtrueuseUnicodetruecharacterEncodingUTF-8serverTimezoneUTCusername: rootpassword: 123456springcloud-consumer-dept-80访问springcloud-provider-dept-8001下的controller使用REST方式
springcloud-consumer-dept-80消费者
80端口请求的时候不用带端口号
如DeptConsumerController.java
/*** Auther: csp1999* Date: 2020/05/17/22:44* Description:*/
RestController
public class DeptConsumerController {/*** 理解消费者不应该有service层~* RestTemplate .... 供我们直接调用就可以了 注册到Spring中* (地址url, 实体Map ,ClassT responseType)* p* 提供多种便捷访问远程http服务的方法简单的Restful服务模板~*/Autowiredprivate RestTemplate restTemplate;/*** 服务提供方地址前缀* p* Ribbon:我们这里的地址应该是一个变量通过服务名来访问*/private static final String REST_URL_PREFIX http://localhost:8001;//private static final String REST_URL_PREFIX http://SPRINGCLOUD-PROVIDER-DEPT;/*** 消费方添加部门信息* param dept* return*/RequestMapping(/consumer/dept/add)public boolean add(Dept dept) {// postForObject(服务提供方地址(接口),参数实体,返回类型.class)return restTemplate.postForObject(REST_URL_PREFIX /dept/add, dept, Boolean.class);}/*** 消费方根据id查询部门信息* param id* return*/RequestMapping(/consumer/dept/get/{id})public Dept get(PathVariable(id) Long id) {// getForObject(服务提供方地址(接口),返回类型.class)return restTemplate.getForObject(REST_URL_PREFIX /dept/get/ id, Dept.class);}/*** 消费方查询部门信息列表* return*/RequestMapping(/consumer/dept/list)public ListDept list() {return restTemplate.getForObject(REST_URL_PREFIX /dept/list, List.class);}
}RestTemplete
使用RestTemplete先需要放入Spring容器中
提供多种便捷访问远程http服务的方法简单的Restful服务模板~
ConfigBean.java
Configuration
public class ConfigBean {//Configuration -- spring applicationContext.xml//配置负载均衡实现RestTemplate// IRule// RoundRobinRule 轮询// RandomRule 随机// AvailabilityFilteringRule 会先过滤掉跳闸访问故障的服务~对剩下的进行轮询~// RetryRule 会先按照轮询获取服务~如果服务获取失败则会在指定的时间内进行重试Beanpublic RestTemplate getRestTemplate(){return new RestTemplate();}
}springcloud-provider-dept-8001的dao接口调用springcloud-api模块下的pojo可使用在springcloud-provider-dept-8001的pom文件导入springcloud-api模块依赖的方式 !--我们需要拿到实体类所以要配置api module--dependencygroupIdcom.haust/groupIdartifactIdspringcloud-api/artifactIdversion1.0-SNAPSHOT/version/dependencyspringcloud-consumer-dept-80和springcloud-provider-dept-8001的pom.xml和父工程下的依赖基本一样直接看完整代码即可不再添加重复笔记。
进行测试
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MFsAuSs9-1610696537737)(C:\Users\王东梁\AppData\Roaming\Typora\typora-user-images\image-20210114231512178.png)]