`

dubbo rest 服务学习笔记(一)【原创】

阅读更多
    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="{&quot;name&quot;:&quot;abc&quot;}">
						<input type="button" value="test dubbo object post" onclick="submitData();">
				</form>
		</body>
</html>

10.采用dubbo客户端访问方式(消费端)在另外一篇写,文章太长。
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    dubbo提供 rest 服务接口

    Dubbo 是阿里巴巴开源的一款高性能、轻量级的 Java RPC 框架,它极大地简化了分布式服务开发的流程,使得服务提供者和服务消费者之间的通信变得简单。在现代微服务架构中,REST(Representational State Transfer)...

    dubbo rest rpc相关jar包

    Dubbo是一款由阿里巴巴开源的高性能、轻量级的Java服务框架,它主要关注服务治理和服务调用。在标题和描述中提到的“dubbo rest rpc相关jar包”是指Dubbo支持RESTful API调用的扩展模块,这使得Dubbo能够与更广泛的...

    基于dubbo的rest注册demo

    通过这个示例,开发者可以学习到如何在Dubbo环境中构建RESTful API,以及如何利用Dubbo的服务治理能力进行分布式服务调用。这不仅简化了跨语言调用的复杂性,也提升了系统的可扩展性和互操作性。

    dubbo学习笔记.pdf

    【Dubbo学习笔记】 Dubbo是一款高性能、轻量级的Java RPC框架,它旨在提供面向接口的远程方法调用、智能容错与负载均衡、服务自动注册与发现等核心功能,帮助开发者构建分布式服务架构。以下是对Dubbo基础知识、...

    dubbo学习笔记

    Dubbo不仅是一个RPC(Remote Procedure Call)框架,还包含了服务治理的诸多功能,如服务注册与发现、服务监控、负载均衡、故障隔离等。 【核心组件】 1. **远程通讯**:Dubbo提供了多种网络协议的抽象封装,如...

    Dubbo之《尚硅谷》学习笔记.md

    Dubbo之《尚硅谷》学习笔记

    dubbo学习例题代码资源

    Dubbo,一款由阿里巴巴开源的高性能Java RPC框架,是服务治理的典型代表,广泛应用于分布式系统中。本资源包包含了几个关键的学习示例,旨在帮助开发者深入理解并掌握Dubbo的核心概念和技术。 1. **Dubbo核心组件**...

    Dubbo 分布式服务架构

    Dubbo分布式服务架构,对于研究大型Web服务器的并发技术的同学们有帮助。

    dubbo学习笔记.doc

    dubbo学习笔记.doc

    dubbo项目开放rest接口并注册到eureka

    例如,你可以创建一个名为`DemoService`的Dubbo服务,其中包含一个`sayHello`方法,然后在Spring MVC的Controller中创建一个对应的REST端点: ```java @RestController @RequestMapping("/demo") public class ...

    Dubbo阅读笔记

    Dubbo是一款高性能、轻量级的Java RPC框架,它致力于简化分布式服务开发,为服务提供者(Provider)和服务消费者(Consumer)之间构建透明的远程调用层。通过这个笔记,我们将探讨Dubbo的核心组件、服务注册与发现...

    dubbo学习文档汇总

    通过这些文档的学习,你将能够理解Dubbo如何实现服务间的透明调用,掌握如何利用Dubbo进行服务治理,以及如何根据项目需求进行服务拆分和框架扩展。同时,你也能够了解到在实际项目中如何优化网络通讯,提高系统的...

    基于zookeeper 监控dubbo provider 下线,提供dubbo 服务下线 邮箱预警

    `Dubbo` 是一款高性能、轻量级的Java服务框架,而`Zookeeper` 则是Apache的一个分布式协调服务,常用于服务治理、配置管理等领域。本项目结合两者,实现了一个针对`Dubbo`服务提供者(`Provider`)下线的监控系统,并...

    dubbo 分布式服务框架 开发者学习文档 PDF格式

    《Dubbo分布式服务框架开发者学习文档》是一份深入解析Dubbo技术体系的重要资料,它涵盖了Dubbo的核心功能和实现机制,对于理解并掌握这个流行的Java分布式服务框架具有极高的价值。Dubbo,作为阿里巴巴开源的一款高...

    dubbo:dubbo学习笔记

    本文将基于"Dubbo学习笔记"这一主题,深入解析Dubbo的核心概念和技术细节。 一、Dubbo简介 1.1 Dubbo的目标 Dubbo旨在简化分布式服务开发,通过提供服务接口、服务注册与发现、服务调用、服务监控等功能,帮助...

    dubbo项目开放rest接口并注册到eureka--升级版

    `Dubbo`原生支持基于`HTTP`的`REST`协议,我们可以通过配置`dubbo`服务提供者来实现这一功能。打开`pom依赖(dubbo开放rest和注册eureka).txt`文件,会看到我们需要引入`dubbo-rest`相关的依赖。这些依赖包括: 1. `...

    MyDubbo:dubbo源码学习笔记

    《MyDubbo:Dubbo源码学习笔记》 在Java开发领域,Dubbo是一个非常知名的分布式服务框架,它由阿里巴巴开源并广泛应用于大型企业系统。本篇笔记将深入探讨Dubbo的核心概念、工作原理以及源码解析,帮助开发者更好地...

    dubbo拆分服务实例.rar

    本实例将深入探讨如何利用Dubbo进行服务的拆分,通过"用户服务"(dubbo-user)和"订单服务"(dubbo-order)两个具体的示例,揭示服务拆分的实施步骤和关键点。 1. 服务拆分原则 服务拆分的目标是提高系统的可扩展性...

    dubbo入门学习框架源码

    通过深入学习和实践Dubbo源码,开发者不仅可以更好地理解Dubbo的工作原理,还能在实际项目中灵活运用,解决各种复杂的分布式服务问题。Dubbo的源码阅读也是一个不断提升自身技术深度的过程,有助于成长为更优秀的...

Global site tag (gtag.js) - Google Analytics