- 浏览: 211839 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
hus20120405:
很不错,我运行起来了
log4jdbc日志框架介绍 -
Roshomon:
牛叉 找了很多解决方案 你的OK了
plsql ora-12154 TNS 无法处理服务名 -
ackley:
赞!谢谢!
Cannot access NLS data files or invalid ...
dubbo是很好的服务治理工具,包含了注册,路由,监控,管理控制台等几个部分,对分析企业的服务依赖和管理有很大的帮助。具体可参看官方文档。
目前我们公司有很多系统交叉提供服务,服务之间缺少必要的监控,对后续系统的重构都带来很大的困难。同时,由于webservice太重,复杂度高,相对来说采用http+json的交换性能较快,复杂性低。因此我们准备在公司内部主推dubbo+rest的服务。采用dubbo发布的rest服务,既能采用传统的http访问方式,又能采用dubbo客户端访问,可以对原有的服务进行透明的升级。以下是dubbo+rest的开发过程:
1)maven配置:pom.xml
2)接口类:RestDemoService
如果采用dubbo客户端调用,必须将rest 相关annotation写在接口上,采用传统http访问方式,则可以写在实现类上
3)实现类
4.POJO: user
5. spring 配置文件
6. dubbo配置文件
7. web.xml配置文件
其中beans.xml包含了4.5两个配置文件
8.将服务在tomcat中启动即可访问。
9.采用传统http访问方式,可以做一个测试页面测试。
10.采用dubbo客户端访问方式(消费端)在另外一篇写,文章太长。
目前我们公司有很多系统交叉提供服务,服务之间缺少必要的监控,对后续系统的重构都带来很大的困难。同时,由于webservice太重,复杂度高,相对来说采用http+json的交换性能较快,复杂性低。因此我们准备在公司内部主推dubbo+rest的服务。采用dubbo发布的rest服务,既能采用传统的http访问方式,又能采用dubbo客户端访问,可以对原有的服务进行透明的升级。以下是dubbo+rest的开发过程:
1)maven配置:pom.xml
<dependency> <groupId>javax.ws.rs</groupId> <artifactId>javax.ws.rs-api</artifactId> <version>${jaxwsrs_version}</version> </dependency> <dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-jaxrs</artifactId> <version>${resteasy_version}</version> </dependency> <dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-client</artifactId> <version>${resteasy_version}</version> </dependency> <dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-netty</artifactId> <version>${resteasy_version}</version> </dependency> <dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-jdk-http</artifactId> <version>${resteasy_version}</version> </dependency> <dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-jackson-provider</artifactId> <version>${resteasy_version}</version> </dependency> <dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-jaxb-provider</artifactId> <version>${resteasy_version}</version> </dependency> <dependency> <groupId>com.esotericsoftware.kryo</groupId> <artifactId>kryo</artifactId> <version>${kryo_version}</version> </dependency> <dependency> <groupId>de.javakaffee</groupId> <artifactId>kryo-serializers</artifactId> <version>${serializers_version}</version> </dependency> <dependency> <groupId>de.ruedigermoeller</groupId> <artifactId>fst</artifactId> <version>${fst_version}</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>${dubbo.version}</version> </dependency>
2)接口类:RestDemoService
package cn.gov.zjport.dubborest.service.rest; import javax.ws.rs.Consumes; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; import cn.gov.zjport.dubborest.pojo.User; @Path("/restdemo") public interface RestDemoService { @GET @Path("/{param}") @Produces(MediaType.TEXT_PLAIN) public String search(@PathParam("param") String param); @GET @Path("/userget") @Consumes({MediaType.APPLICATION_XML}) @Produces({MediaType.APPLICATION_JSON}) public User get(@QueryParam("name") String name); @POST @Path("/userpost") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public User post(User user); }
如果采用dubbo客户端调用,必须将rest 相关annotation写在接口上,采用传统http访问方式,则可以写在实现类上
3)实现类
package cn.gov.zjport.dubborest.service.rest.impl; import javax.annotation.Resource; import org.springframework.stereotype.Service; import cn.gov.zjport.dubborest.pojo.User; import cn.gov.zjport.dubborest.service.rest.RestDemoService; import cn.gov.zjport.dubborest.service.system.SettingService; @Service("restDemoService") public class RestDemoServiceImpl implements RestDemoService{ @Resource private SettingService settingService; public String search(String param) { return settingService.getName(param); } public User get(String name){ User user=new User(); user.setId(100L); user.setName(name+"abc"); return user; } public User post(User user){ user.setName(user.getName()+"xyz"); return user; } }
4.POJO: user
package cn.gov.zjport.dubborest.pojo; import java.io.Serializable; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class User implements Serializable{ /** * */ private static final long serialVersionUID = 1L; private String name; private Long id; public User(){ } public User(String name){ this.name=name; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } }
5. spring 配置文件
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:cache="http://www.springframework.org/schema/cache" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-4.0.xsd"> <!-- 注解驱动 --> <context:annotation-config /> <context:component-scan base-package="cn.gov.zjport.dubborest.service" > </context:component-scan> </beans>
6. dubbo配置文件
<?xml version="1.0" encoding="UTF-8"?> <!-- - Copyright 1999-2011 Alibaba Group. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. --> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <dubbo:application name="dubborest-webapp" owner="dubborest" organization="zjport"/> <dubbo:registry address="zookeeper://192.168.3.110:2181"/> <!--uncomment this if you want to test dubbo's monitor--> <!--<dubbo:monitor protocol="registry"/>--> <!-- here we demonstrate both annotation-based and xml-based configs --> <dubbo:annotation package="cn.gov.zjport.dubborest.service" /> <!-- use tomcat server --> <dubbo:protocol name="rest" port="7056" contextpath="dubborest-webapp" server="servlet" extension="com.alibaba.dubbo.rpc.protocol.rest.support.LoggingFilter"/> <dubbo:service interface="cn.gov.zjport.dubborest.service.rest.RestDemoService" ref="restDemoService" protocol="rest" timeout="2000" connections="100" validation="true"/> </beans>
7. web.xml配置文件
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:javaee="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <display-name>dubborest</display-name> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:/config/beans.xml</param-value> </context-param> <filter> <filter-name>Encoding</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>Encoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <listener> <listener-class>com.alibaba.dubbo.remoting.http.servlet.BootstrapListener</listener-class> </listener> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>com.alibaba.dubbo.remoting.http.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> </web-app>
其中beans.xml包含了4.5两个配置文件
8.将服务在tomcat中启动即可访问。
9.采用传统http访问方式,可以做一个测试页面测试。
<html> <head> <script type="text/javascript" src="./jquery.js"></script> <script> function submitData(){ $.ajax({ url:"http://192.168.180.15:7056/dubborest-webapp/restdemo/userpost", type:"POST", data:$("#name").val(), contentType:"application/json; charset=utf-8", dataType:"json", async:false, success:function(msg){ alert(msg.name); } }) } </script> </head> <body> <a href="http://192.168.180.15:7056/dubborest-webapp/restdemo/userget?name=ggg">test dubbo rest get</a> <br> <a href="http://192.168.180.15:7056/dubborest-webapp/restdemo/kkk">test dubbo rest get by path</a> <br> please use IE browser POST <form id="userForm" name="userForm"> <input type="text" id="name" name="name" value="{"name":"abc"}"> <input type="button" value="test dubbo object post" onclick="submitData();"> </form> </body> </html>
10.采用dubbo客户端访问方式(消费端)在另外一篇写,文章太长。
发表评论
文章已被作者锁定,不允许评论。
-
zookeeper docker 集群安装
2022-10-14 17:18 1331. 下载镜像 docker pull docker.io/z ... -
Kafka学习笔记【三】-JAVA调用示例
2018-05-29 08:35 5691. pom.xml <dependency> ... -
Kafka学习笔记【二】-安装
2018-05-24 08:20 354kafka的安装如下: 一、准备环境 1) 三台服务器 ... -
Kafka学习笔记【一】-原理
2018-05-18 09:23 249一、kafka的重要概念 1. kafka 分为 Produ ... -
rabbitMQ学习笔记【三】-haproxy部署 原创
2018-04-11 16:11 374一、下载 https://fossies.org/lin ... -
rabbitMQ学习笔记【二】-集群部署 原创
2018-04-03 19:40 397一、准备工作 三台机器hosts: 192.168.3 ... -
rabbitMQ学习笔记【一】-单机部署 原创
2018-03-19 16:04 405公司对外接入需要支持MQ,最终选定rabbitMQ.本文 ... -
HttpClient 学习笔记【原创】
2017-09-07 19:28 1872HttpClient 某些方法的作用梳理。本文的测试基于htt ... -
关于dubbo的思考【原创】
2016-09-21 08:23 1317最近在看dubbo的文档,有些内容结合自己的思考记录一下 1. ... -
dubbo http webservice 服务学习笔记【原创】
2016-09-11 19:12 6473学习了 dubbo rest服务之后,再使用dubbo htt ... -
dubbo rest 服务学习笔记(三)【原创】
2016-09-09 19:34 8746在配置过程中遇到两个 ... -
dubbo rest 服务学习笔记(二)【原创】
2016-09-09 19:21 1377采用dubbo客户端访问dubbo发布的rest服务,接上一篇 ... -
RocketMq数据处理
2016-06-27 08:58 609这篇讲实践中数据丢失、顺序幂等处理、性能压测,有时间再写 -
RocketMq学习笔记(2)【原创】
2016-06-27 08:55 1124前一篇文章http://zhenggm.i ... -
MS MQ 使用实践【原创】
2016-06-26 14:58 7661. 参照百度经验http://jingyan.baidu.c ... -
RocketMq学习笔记【原创】
2016-06-23 14:05 1577前段时间在实施分布式数据库的过程中,使用过rocketMQ, ... -
rest的调用 java 示例代码【原创】
2016-06-20 15:35 11171. 服务端示例代码(如何搭建rest服务,请看上一篇) ... -
jersey2 与 spring4 整合实践【原创】
2016-06-13 15:35 4970前几年用过jeysey,那都是1.x版本的,jersey2有很 ... -
java nio入门
2010-03-04 17:22 952首先了解下所谓的java nio是个什么东西! ... -
spring http invoker学习笔记
2010-01-04 16:58 3664概念 Spring HTTP invoker是spring框架 ...
相关推荐
Dubbo 是阿里巴巴开源的一款高性能、轻量级的 Java RPC 框架,它极大地简化了分布式服务开发的流程,使得服务提供者和服务消费者之间的通信变得简单。在现代微服务架构中,REST(Representational State Transfer)...
Dubbo是一款由阿里巴巴开源的高性能、轻量级的Java服务框架,它主要关注服务治理和服务调用。在标题和描述中提到的“dubbo rest rpc相关jar包”是指Dubbo支持RESTful API调用的扩展模块,这使得Dubbo能够与更广泛的...
通过这个示例,开发者可以学习到如何在Dubbo环境中构建RESTful API,以及如何利用Dubbo的服务治理能力进行分布式服务调用。这不仅简化了跨语言调用的复杂性,也提升了系统的可扩展性和互操作性。
【Dubbo学习笔记】 Dubbo是一款高性能、轻量级的Java RPC框架,它旨在提供面向接口的远程方法调用、智能容错与负载均衡、服务自动注册与发现等核心功能,帮助开发者构建分布式服务架构。以下是对Dubbo基础知识、...
Dubbo不仅是一个RPC(Remote Procedure Call)框架,还包含了服务治理的诸多功能,如服务注册与发现、服务监控、负载均衡、故障隔离等。 【核心组件】 1. **远程通讯**:Dubbo提供了多种网络协议的抽象封装,如...
Dubbo之《尚硅谷》学习笔记
Dubbo,一款由阿里巴巴开源的高性能Java RPC框架,是服务治理的典型代表,广泛应用于分布式系统中。本资源包包含了几个关键的学习示例,旨在帮助开发者深入理解并掌握Dubbo的核心概念和技术。 1. **Dubbo核心组件**...
Dubbo分布式服务架构,对于研究大型Web服务器的并发技术的同学们有帮助。
dubbo学习笔记.doc
例如,你可以创建一个名为`DemoService`的Dubbo服务,其中包含一个`sayHello`方法,然后在Spring MVC的Controller中创建一个对应的REST端点: ```java @RestController @RequestMapping("/demo") public class ...
Dubbo是一款高性能、轻量级的Java RPC框架,它致力于简化分布式服务开发,为服务提供者(Provider)和服务消费者(Consumer)之间构建透明的远程调用层。通过这个笔记,我们将探讨Dubbo的核心组件、服务注册与发现...
通过这些文档的学习,你将能够理解Dubbo如何实现服务间的透明调用,掌握如何利用Dubbo进行服务治理,以及如何根据项目需求进行服务拆分和框架扩展。同时,你也能够了解到在实际项目中如何优化网络通讯,提高系统的...
`Dubbo` 是一款高性能、轻量级的Java服务框架,而`Zookeeper` 则是Apache的一个分布式协调服务,常用于服务治理、配置管理等领域。本项目结合两者,实现了一个针对`Dubbo`服务提供者(`Provider`)下线的监控系统,并...
《Dubbo分布式服务框架开发者学习文档》是一份深入解析Dubbo技术体系的重要资料,它涵盖了Dubbo的核心功能和实现机制,对于理解并掌握这个流行的Java分布式服务框架具有极高的价值。Dubbo,作为阿里巴巴开源的一款高...
本文将基于"Dubbo学习笔记"这一主题,深入解析Dubbo的核心概念和技术细节。 一、Dubbo简介 1.1 Dubbo的目标 Dubbo旨在简化分布式服务开发,通过提供服务接口、服务注册与发现、服务调用、服务监控等功能,帮助...
`Dubbo`原生支持基于`HTTP`的`REST`协议,我们可以通过配置`dubbo`服务提供者来实现这一功能。打开`pom依赖(dubbo开放rest和注册eureka).txt`文件,会看到我们需要引入`dubbo-rest`相关的依赖。这些依赖包括: 1. `...
《MyDubbo:Dubbo源码学习笔记》 在Java开发领域,Dubbo是一个非常知名的分布式服务框架,它由阿里巴巴开源并广泛应用于大型企业系统。本篇笔记将深入探讨Dubbo的核心概念、工作原理以及源码解析,帮助开发者更好地...
本实例将深入探讨如何利用Dubbo进行服务的拆分,通过"用户服务"(dubbo-user)和"订单服务"(dubbo-order)两个具体的示例,揭示服务拆分的实施步骤和关键点。 1. 服务拆分原则 服务拆分的目标是提高系统的可扩展性...
通过深入学习和实践Dubbo源码,开发者不仅可以更好地理解Dubbo的工作原理,还能在实际项目中灵活运用,解决各种复杂的分布式服务问题。Dubbo的源码阅读也是一个不断提升自身技术深度的过程,有助于成长为更优秀的...