js 抽奖网站,北京南站地铁,广告网站有哪些,企业高端网站建设美工文章目录
文章说明
一#xff1a;Rest协议简介
二#xff1a;搭建开发环境
1#xff1a;父项目里边引入的新的版本内容
2#xff1a;Api中的操作
3#xff1a;Provider模块
三#xff1a;编码
1#xff1a;API模块
2#xff1a;Provider模块
3#xff1a;Co…文章目录
文章说明
一Rest协议简介
二搭建开发环境
1父项目里边引入的新的版本内容
2Api中的操作
3Provider模块
三编码
1API模块
2Provider模块
3Consumer模块 文章说明
本文内容整理自《孙哥说Dubbo系列视频课程》孙帅老师课程细致、全面、深入、性价比极高。B站搜孙帅suns可以找到对应的试听视频或者直接添加老师微信号suns45与他直接联系
一Rest协议简介
Rest协议就是我们我们一开始基于SpringBoot或者是SpringMVC开发说的Restful本质上把他称为协议不准确。本身因为Restful他是基于Http1.x协议的。但是在这里Dubbo指的Rest协议本质上就是指的Http协议只不过Dubbo在这里改了相应的命名。
一旦我们引入这种协议之后我们在Dubbo中就会有一种新的有意思的调用方式产生了。之前Consumer里边调用Provider的代理基于Rest协议了我们设置可以在浏览器中或者其他的客户端中进行调用了。
作为Dubbo为什么要支持Rest协议呢他底层是基于Http协议的协议层次比较高运行效率比较低。Dubbo这么做是为了和SpringCloud这个技术栈进行整合。因为SpringCloud这个技术栈的Rpc是基于Http的。为了和他进行良好的整合Dubbo才支持了这种协议方式。
二搭建开发环境
我们研究Rest协议还是要按照之前的项目结构为基础。
1父项目里边引入的新的版本内容
properties
maven.compiler.source8/maven.compiler.source
maven.compiler.target8/maven.compiler.target
project.build.sourceEncodingUTF-8/project.build.sourceEncoding
dubbo.version3.2.0/dubbo.version
spring-boot.version2.7.12/spring-boot.versionjackson-version1.9.13/jackson-version
resteasy-version3.15.6.Final/resteasy-version
tomcat.version9.0.75/tomcat.version/properties
jackson-version的作用就是使用Http协议的时候基于JSON进行数据的序列化。resteasy这个作用是为了发布rest的访问我们之前在SpringMVC的时候由Rest的支持但是我们使用Dubbo操作Http的时候需要有这个一个RestFul的支持这个是JBoss为我们提供的产品用于发布Rest的访问。Tomcat主要是用于Http的访问。
我们知道协议对于通信方式是有选择dubbo协议最好的通信方式是NettyRest协议或者说是Http协议他的最好的通信方式是服务器服务器我们首选的就是Tomcat所以我们还需要引入一个Tomcat依赖。 dependencygroupIdorg.apache.dubbo/groupIdartifactIddubbo-rpc-rest/artifactIdversion${dubbo.version}/versionexclusionsexclusionartifactIdjackson-core-asl/artifactIdgroupIdorg.codehaus.jackson/groupId/exclusionexclusionartifactIdjackson-jaxrs/artifactIdgroupIdorg.codehaus.jackson/groupId/exclusionexclusionartifactIdjackson-mapper-asl/artifactIdgroupIdorg.codehaus.jackson/groupId/exclusionexclusionartifactIdjackson-xc/artifactIdgroupIdorg.codehaus.jackson/groupId/exclusion/exclusions/dependencydependencygroupIdorg.jboss.resteasy/groupIdartifactIdresteasy-jackson-provider/artifactIdversion${resteasy-version}/versionexclusionsexclusionartifactIdjackson-core-asl/artifactIdgroupIdorg.codehaus.jackson/groupId/exclusionexclusionartifactIdjackson-jaxrs/artifactIdgroupIdorg.codehaus.jackson/groupId/exclusionexclusionartifactIdjackson-mapper-asl/artifactIdgroupIdorg.codehaus.jackson/groupId/exclusionexclusionartifactIdjackson-xc/artifactIdgroupIdorg.codehaus.jackson/groupId/exclusion/exclusions/dependency dependencyartifactIdjackson-core-asl/artifactIdgroupIdorg.codehaus.jackson/groupIdversion${jackson-version}/version/dependencydependencyartifactIdjackson-jaxrs/artifactIdgroupIdorg.codehaus.jackson/groupIdversion${jackson-version}/version/dependencydependencyartifactIdjackson-mapper-asl/artifactIdgroupIdorg.codehaus.jackson/groupIdversion${jackson-version}/version/dependencydependencyartifactIdjackson-xc/artifactIdgroupIdorg.codehaus.jackson/groupIdversion${jackson-version}/version/dependency
dubbo-rpc-rest只要想让我们的Dubbo支持DubboRest就必须导入这个依赖。
resteasy-jackson-provider发布Rest服务
到这里我们的父项目就搭建完毕了。
2Api中的操作
propertiesmaven.compiler.source8/maven.compiler.sourcemaven.compiler.target8/maven.compiler.targetproject.build.sourceEncodingUTF-8/project.build.sourceEncoding
/properties
3Provider模块 parentgroupIdcom.suns/groupIdartifactIddubbo-procolo-demo/artifactIdversion1.0-SNAPSHOT/version/parentartifactIddubbo-protocol-provider/artifactIdpropertiesmaven.compiler.source8/maven.compiler.sourcemaven.compiler.target8/maven.compiler.targetproject.build.sourceEncodingUTF-8/project.build.sourceEncoding/propertiesdependenciesdependencygroupIdcom.suns/groupIdartifactIddubbo-protocol-api/artifactIdversion1.0-SNAPSHOT/version/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactIdexclusionsexclusionartifactIdtomcat-embed-core/artifactIdgroupIdorg.apache.tomcat.embed/groupId/exclusion/exclusions/dependencydependencygroupIdorg.apache.tomcat.embed/groupIdartifactIdtomcat-embed-core/artifactIdversion${tomcat.version}/version/dependency/dependencies
Provider需要支持Rest访问那么必须引入Tomcat来发布服务spring-boot-starter-web这个起东器中包含了Tomcat但是我们排除一下使用自己引入的Tomcat。
4Consumer模块
properties
maven.compiler.source8/maven.compiler.source
maven.compiler.target8/maven.compiler.target
project.build.sourceEncodingUTF-8/project.build.sourceEncoding
/properties
dependencies
!--API 模块--
dependency
groupIdcom.suns/groupId
artifactIddubbo-dubbo-001-api/artifactId
version1.0-SNAPSHOT/version
/dependency
/dependencies
三编码
1API模块
API模块主要是两个作用1定义实体2定义服务接口
Path(users)
Consumes({MediaType.APPLICATION_JSON})
//client给服务器端 发送的请求数据 json RequestBody
Produces({ContentType.APPLICATION_JSON_UTF_8})
//服务器给client响应的数据 json ResponseBody
public interface UserService {GET // GetMapping RequestMapping(methodget)Path({name}/{password}) //PathVariablepublic User login(PathParam(name) String name, PathParam(password) String password);
}
Path注解的作用就参照SpringMVC里边RequestMapping注解的作用一旦在这个接口上添加完毕这个注解之后就相当于往外边暴露了一个Rest接口此时他的访问路径
http://localhost:8080/应用名/users
Consumes的作用就相当于SpringMVC当中的RequestBody这个注解告诉我们的请求者这里边是一个JSON。也就是只有给我发JSON我才能解析。
Produces注解的作用就相当于SpringMVC或者是SpringBoot里边RequestBody注解中的Produces的属性也就是告诉我们的响应的结构是UTF-8的字符集编码的JSON避免乱码的产生。
Get注解的作用就是告诉采用Get的方式发起请求
http://localhost:8080/应用名/users/sunshuai/123456
然后sunshuai和123456就会分别给到两个参数然后接口就开是拿着这两个参数跑了。具体示例如下
Data
ToString
AllArgsConstructor
NoArgsConstructor
public class Order {private String orderNo;private double price;
}import javax.ws.rs.*;
Path(orders)
Consumes({MediaType.APPLICATION_JSON})
Produces({ContentType.APPLICATION_JSON_UTF_8})
public interface OrderService {GETPath({id})Order getOrder(PathParam(id) Long id);
}
注意这些注解的包 javax.ws.rs这个包下的注解是JavaEE规范中对标准RestFul的支持。
2Provider模块
DubboService
public class UserServiceImpl implements UserService {Overridepublic User login(String name, String password) {System.out.println(UserServiceImpl.login name name password is password);return new User(孙帅, 123456);}
}
Provider是对接口的实现并且把改该实现类发布为一个DubboRPC。
spring:application:name: DUBBO-PROTOCOL-PROVIDERdubbo:protocol:name: restport: 9001server: tomcatcontextpath: sunsregistry:address: zookeeper://127.0.0.1:2181
server:port: 8081
这里的重点是在协议name上使用的是rest协议也就是Http协议。我们知道Http协议是应用层协议。应用层协议需要指定服务器所以里边才配置了server是tomcatport指的是服务器的端口。这样后续在Rpc的时候地址就是应该是9001端口了。contextpath指的是suns设置的是应用名。这样最终的地址就变成了Http://localhost:9001/suns/orders/1
server.port是指我们导入依赖的时候引入了Tomcat他默认启动的时候也会启动Tomcat我们为他指定端口为8081避免和我们的Rest端口发生冲突。
基于Rest协议进行RPC通信的端口是9001DubboService注解的作用是发布为一个DubboRpc服务此时的作用就异常重要了有了这个注解这个Service配合上之前接口里边定义的各种注解才会被发布成一个Rest服务。
通过我们浏览器访问进行测试Http://localhost:9001/suns/orders/1确实可以调用成功没有任何的Controller。
3Consumer模块
spring:application:name: DUBBO-DUBBO-003-CONSUMER
dubbo:registry:address: zookeeper://127.0.0.1:2181application:qos-enable: false
DubboReference(protocol rest)
private UserService userService;
DubboReference这里必须要指定具体的协议。Dubbo协议因为是默认的所以不需要。 DubboReference(protocol rest)private OrderService orderService;Testvoid test2() {Order order orderService.getOrder(1L);System.out.println(order order);}
到这里Dubbo在整个基于Rest协议的开发我们就分析完了。