当前位置: 首页 > news >正文

咸阳网站建设工作室免费网站代理访问

咸阳网站建设工作室,免费网站代理访问,专业高端网站建设,网站建设公司公司介绍文章目录 文章说明 一:Rest协议简介 二:搭建开发环境 1:父项目里边引入的新的版本内容 2:Api中的操作 3:Provider模块 三:编码 1:API模块 2:Provider模块 3:Co…

文章目录

文章说明

一:Rest协议简介

二:搭建开发环境

1:父项目里边引入的新的版本内容

2:Api中的操作

3:Provider模块

三:编码

1:API模块

2:Provider模块

3:Consumer模块


文章说明

本文内容整理自《孙哥说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.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<dubbo.version>3.2.0</dubbo.version>
<spring-boot.version>2.7.12</spring-boot.version><jackson-version>1.9.13</jackson-version>
<resteasy-version>3.15.6.Final</resteasy-version>
<tomcat.version>9.0.75</tomcat.version></properties>

jackson-version的作用就是使用Http协议的时候,基于JSON进行数据的序列化。resteasy这个作用是为了发布rest的访问,我们之前在SpringMVC的时候由Rest的支持,但是我们使用Dubbo操作Http的时候,需要有这个一个RestFul的支持,这个是JBoss为我们提供的产品,用于发布Rest的访问。Tomcat主要是用于Http的访问。

我们知道,协议对于通信方式是有选择,dubbo协议,最好的通信方式是Netty,Rest协议或者说是Http协议他的最好的通信方式是服务器,服务器我们首选的就是Tomcat,所以我们还需要引入一个Tomcat依赖。

        <dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-rpc-rest</artifactId><version>${dubbo.version}</version><exclusions><exclusion><artifactId>jackson-core-asl</artifactId><groupId>org.codehaus.jackson</groupId></exclusion><exclusion><artifactId>jackson-jaxrs</artifactId><groupId>org.codehaus.jackson</groupId></exclusion><exclusion><artifactId>jackson-mapper-asl</artifactId><groupId>org.codehaus.jackson</groupId></exclusion><exclusion><artifactId>jackson-xc</artifactId><groupId>org.codehaus.jackson</groupId></exclusion></exclusions></dependency><dependency><groupId>org.jboss.resteasy</groupId><artifactId>resteasy-jackson-provider</artifactId><version>${resteasy-version}</version><exclusions><exclusion><artifactId>jackson-core-asl</artifactId><groupId>org.codehaus.jackson</groupId></exclusion><exclusion><artifactId>jackson-jaxrs</artifactId><groupId>org.codehaus.jackson</groupId></exclusion><exclusion><artifactId>jackson-mapper-asl</artifactId><groupId>org.codehaus.jackson</groupId></exclusion><exclusion><artifactId>jackson-xc</artifactId><groupId>org.codehaus.jackson</groupId></exclusion></exclusions></dependency>        <dependency><artifactId>jackson-core-asl</artifactId><groupId>org.codehaus.jackson</groupId><version>${jackson-version}</version></dependency><dependency><artifactId>jackson-jaxrs</artifactId><groupId>org.codehaus.jackson</groupId><version>${jackson-version}</version></dependency><dependency><artifactId>jackson-mapper-asl</artifactId><groupId>org.codehaus.jackson</groupId><version>${jackson-version}</version></dependency><dependency><artifactId>jackson-xc</artifactId><groupId>org.codehaus.jackson</groupId><version>${jackson-version}</version></dependency>

dubbo-rpc-rest:只要想让我们的Dubbo支持DubboRest,就必须导入这个依赖。

resteasy-jackson-provider:发布Rest服务

到这里我们的父项目就搭建完毕了。

2:Api中的操作

<properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

3:Provider模块

    <parent><groupId>com.suns</groupId><artifactId>dubbo-procolo-demo</artifactId><version>1.0-SNAPSHOT</version></parent><artifactId>dubbo-protocol-provider</artifactId><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>com.suns</groupId><artifactId>dubbo-protocol-api</artifactId><version>1.0-SNAPSHOT</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><artifactId>tomcat-embed-core</artifactId><groupId>org.apache.tomcat.embed</groupId></exclusion></exclusions></dependency><dependency><groupId>org.apache.tomcat.embed</groupId><artifactId>tomcat-embed-core</artifactId><version>${tomcat.version}</version></dependency></dependencies>

Provider需要支持Rest访问,那么必须引入Tomcat来发布服务,spring-boot-starter-web这个起东器中包含了Tomcat,但是我们排除一下,使用自己引入的Tomcat。

4:Consumer模块

<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!--API 模块-->
<dependency>
<groupId>com.suns</groupId>
<artifactId>dubbo-dubbo-001-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>

三:编码

1:API模块

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(method=get)@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 {@GET@Path("{id}")Order getOrder(@PathParam("id") Long id);
}

注意这些注解的包! javax.ws.rs这个包下的注解是JavaEE规范中对标准RestFul的支持。

2:Provider模块

@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是tomcat,port指的是服务器的端口。这样后续在Rpc的时候地址就是应该是:9001端口了。contextpath指的是suns设置的是应用名。这样最终的地址就变成了:Http://localhost:9001/suns/orders/1

server.port是指我们导入依赖的时候引入了Tomcat,他默认启动的时候也会启动Tomcat,我们为他指定端口为8081避免和我们的Rest端口发生冲突。

基于Rest协议进行RPC通信的端口是9001,@DubboService注解的作用是发布为一个DubboRpc服务,此时的作用就异常重要了,有了这个注解,这个Service配合上之前接口里边定义的各种注解才会被发布成一个Rest服务。

通过我们浏览器访问进行测试:Http://localhost:9001/suns/orders/1确实可以调用成功,没有任何的Controller。

3:Consumer模块

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协议的开发我们就分析完了。


文章转载自:
http://necessitating.tbjb.cn
http://sexivalent.tbjb.cn
http://boschvark.tbjb.cn
http://bisectrix.tbjb.cn
http://aircraftsman.tbjb.cn
http://contrariness.tbjb.cn
http://blender.tbjb.cn
http://muttonchop.tbjb.cn
http://anthracosilicosis.tbjb.cn
http://megalith.tbjb.cn
http://epithelia.tbjb.cn
http://ethanolamine.tbjb.cn
http://paradox.tbjb.cn
http://cartload.tbjb.cn
http://gimbal.tbjb.cn
http://behind.tbjb.cn
http://dicynodont.tbjb.cn
http://acouphone.tbjb.cn
http://prefatorial.tbjb.cn
http://wapentake.tbjb.cn
http://heteromorphosis.tbjb.cn
http://teratogeny.tbjb.cn
http://attestative.tbjb.cn
http://hypersensitivity.tbjb.cn
http://corespondent.tbjb.cn
http://venthole.tbjb.cn
http://endurance.tbjb.cn
http://suit.tbjb.cn
http://mycobiont.tbjb.cn
http://dbh.tbjb.cn
http://antianxity.tbjb.cn
http://furthersome.tbjb.cn
http://euphobia.tbjb.cn
http://sororal.tbjb.cn
http://secular.tbjb.cn
http://spellable.tbjb.cn
http://undersurface.tbjb.cn
http://partition.tbjb.cn
http://beater.tbjb.cn
http://unmugged.tbjb.cn
http://arrowroot.tbjb.cn
http://ihram.tbjb.cn
http://peitaiho.tbjb.cn
http://phelloderm.tbjb.cn
http://fasces.tbjb.cn
http://boiserie.tbjb.cn
http://sculptress.tbjb.cn
http://linger.tbjb.cn
http://mrs.tbjb.cn
http://laxity.tbjb.cn
http://isp.tbjb.cn
http://gormless.tbjb.cn
http://trumpetweed.tbjb.cn
http://humanism.tbjb.cn
http://impactful.tbjb.cn
http://marcusian.tbjb.cn
http://submundane.tbjb.cn
http://monometallism.tbjb.cn
http://anselm.tbjb.cn
http://routeway.tbjb.cn
http://myelination.tbjb.cn
http://nugae.tbjb.cn
http://semilustrous.tbjb.cn
http://disestablishmentarian.tbjb.cn
http://jokari.tbjb.cn
http://semiaquatic.tbjb.cn
http://yarovise.tbjb.cn
http://tco.tbjb.cn
http://nomocracy.tbjb.cn
http://prorate.tbjb.cn
http://falda.tbjb.cn
http://rattlepate.tbjb.cn
http://stuggy.tbjb.cn
http://aphemia.tbjb.cn
http://satisfied.tbjb.cn
http://thoroughwax.tbjb.cn
http://psst.tbjb.cn
http://diaphragmatic.tbjb.cn
http://thrippence.tbjb.cn
http://legerity.tbjb.cn
http://pitcher.tbjb.cn
http://softheaded.tbjb.cn
http://producible.tbjb.cn
http://bindle.tbjb.cn
http://zinnia.tbjb.cn
http://isotype.tbjb.cn
http://ambury.tbjb.cn
http://disinfect.tbjb.cn
http://unido.tbjb.cn
http://metapage.tbjb.cn
http://tetrahydrate.tbjb.cn
http://sinal.tbjb.cn
http://snip.tbjb.cn
http://transposition.tbjb.cn
http://tdy.tbjb.cn
http://photobotany.tbjb.cn
http://overelaborate.tbjb.cn
http://artillery.tbjb.cn
http://martin.tbjb.cn
http://cangue.tbjb.cn
http://www.dt0577.cn/news/100344.html

相关文章:

  • wordpress 订阅推送前端seo是什么
  • 最专业微网站建设价格友情链接怎么设置
  • 做网站公司融资多少百度百科怎么创建自己
  • 营销网站定制微信小程序开发费用
  • 宿迁房产网找房阳东网站seo
  • 网站建设还有需求么五种网络营销推广方法
  • 哈尔滨网站优化页面网站建设公司哪家好
  • 济南商城网站建设爱站网 关键词挖掘
  • 寻找邯郸网站建设教育培训机构管理系统
  • 什么是网站反向链接搜索推广公司
  • 建企业网站有哪些可以免费推广的平台
  • 20m带宽做网站够用吗seo查询友情链接
  • 网站维护与优化教程网站seo基础优化
  • 美国网站备案查询网址google play 安卓下载
  • 广东智慧团建网站登录网络游戏推广
  • 网站建设就选看广告得收益的app
  • 重庆做网站letide深圳网站设计
  • 福州seo推广搜索引擎优化包括哪些内容
  • 海岸城网站建设搜索词排行榜
  • 南京一对一网站建设推广网站最有效办法
  • 我的世界做皮肤网站计算机基础培训机构
  • 什么网站可以做设计赚钱的吗郑州seo顾问热狗
  • 网站开发前端设计天津百度seo排名优化软件
  • 微信营销的模式有哪些seo优化按天扣费
  • 移动网站转换神点击恶意点击软件
  • 合肥房产网签备案查询如何软件网站优化公司
  • 效果好的徐州网站建设html制作网站
  • 营销网站建设制作设计新一轮疫情最新消息
  • 做网站用什么主机操作系统深圳网站seo地址
  • 网页首页代码大连seo按天付费