优化网站推广,网站如何被搜索到,建模培训机构,公司网站平台建设一、前言 项目中用到了Dubbo#xff0c;临时抱大腿#xff0c;学习了dubbo的简单实用方法。现在就来总结一下dubbo如何提供服务#xff0c;如何消费服务#xff0c;并做了一个简单的demo作为参考。 二、Dubbo是什么 Dubbo是一个分布式服务框架#xff0c;致力于提供高性能… 一、前言 项目中用到了Dubbo临时抱大腿学习了dubbo的简单实用方法。现在就来总结一下dubbo如何提供服务如何消费服务并做了一个简单的demo作为参考。 二、Dubbo是什么 Dubbo是一个分布式服务框架致力于提供高性能和透明化的RPC远程服务调用方案以及SOA服务治理方案。简单的说dubbo就是个服务框架如果没有分布式的需求其实是不需要用的只有在分布式的时候才有dubbo这样的分布式服务框架的需求并且本质上是个服务调用的东东说白了就是个远程服务调用的分布式框架告别Web Service模式中的WSdl以服务者与消费者的方式在dubbo上注册其核心部分包含: 1. 远程通讯: 提供对多种基于长连接的NIO框架抽象封装包括多种线程模型序列化以及“请求-响应”模式的信息交换方式。 2. 集群容错: 提供基于接口方法的透明远程过程调用包括多协议支持以及软负载均衡失败容错地址路由动态配置等集群支持。 3. 自动发现: 基于注册中心目录服务使服务消费方能动态的查找服务提供方使地址透明使服务提供方可以平滑增加或减少机器。 摘自http://www.cnblogs.com/Javame/p/3632473.html 三、dubbo配置 1.dubbo需要依赖的jar ?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.hjz/groupIdartifactIddubbo/artifactIdversion0.0.1-SNAPSHOT/versionpackagingpom/packagingmodulesmodulehjz-dubbo-api/modulemodulehjz-dubbo-consumer/modulemodulehjz-dubbo-provider/module/modulesdependenciesdependencygroupIdcom.alibaba/groupIdartifactIddubbo/artifactIdversion2.8.4/version/dependencydependencygroupIdjavassist/groupIdartifactIdjavassist/artifactIdversion3.12.1.GA/version/dependencydependencygroupIdorg.apache.zookeeper/groupIdartifactIdzookeeper/artifactIdversion3.4.6/version/dependencydependencygroupIdcom.github.sgroschupf/groupIdartifactIdzkclient/artifactIdversion0.1/version/dependency/dependencies
/project 2.dubbo服务接口 package com.hjz.dubbo.api;public interface DubboServiceTest {public int calculate(int a, int b);
} 3.dubbo服务生产者配置 实现dubbo服务的接口 package com.hjz.service;import org.springframework.stereotype.Service;import com.hjz.dubbo.api.DubboServiceTest;Service(dubboServiceTest)
public class DubboServiceProvider implements DubboServiceTest {Overridepublic int calculate(int a, int b) {return ab;}} dubbo服务提供者配置classpath:dubbo-provider-example.xml ?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:contexthttp://www.springframework.org/schema/contextxmlns:dubbohttp://code.alibabatech.com/schema/dubboxsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsdhttp://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsddescriptiondubbo公共配置/description!-- 扫描需要注入到spring容器中的bean --context:component-scan base-packagecom.hjz.service /!-- 引入dubbo需要的配置文件 --context:property-placeholder locationclasspath:dubbo-example.properties / !-- 同一个工程只配置一份即可 --dubbo:application namehjz-dubbo ownerhjzgg/!-- 发布dubbo需要对外的协议dubbo和端口2088020880是dubbo默认提供的端口若一台机器发布多个dubbo服务则此端口需要显示配置多个dubbo服务端口需要不一样否则会端口冲突 --dubbo:protocol namedubbo port${dubbo.protocol.port} serializationjava/!-- 配置dubbo服务失败后的重试次数和接口超时时间 --dubbo:provider retries0 timeout${dubbo.provider.timeout}/!-- dubbo注册到zookeeper用于预发布或生产环境 --!-- dubbo:registry protocolzookeeper address${zookeeper.addr} / --!-- dubbo不注册到任何registry用于开发或测试环境--dubbo:registry protocolzookeeper addressN/A /dubbo:service refdubboServiceTest interfacecom.hjz.dubbo.api.DubboServiceTest/
/beans 由于是提供者作为一个web项目所以web.xml文件如下。 ?xml version1.0 encodingUTF-8?
web-app xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_2_5.xsdversion2.5 xmlnshttp://xmlns.jcp.org/xml/ns/javaeedisplay-namehjz-dubbo-provider/display-namecontext-paramparam-namecontextConfigLocation/param-nameparam-valueclasspath:dubbo-provider-example.xml/param-value/context-paramcontext-paramparam-namelog4jConfigLocation/param-nameparam-valueclasspath:log4j.properties/param-value/context-paramlistenerlistener-classorg.springframework.web.context.ContextLoaderListener/listener-class/listenerwelcome-file-list/welcome-file-list
/web-app 4.dubbo服务消费者配置 dubbo服务消费者测试类 package com.hjz.dubbo.consumer;import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import com.alibaba.dubbo.common.logger.Logger;
import com.alibaba.dubbo.common.logger.LoggerFactory;
import com.hjz.dubbo.api.DubboServiceTest;RunWith(SpringJUnit4ClassRunner.class)
ContextConfiguration(locations{classpath:dubbo-consumer-example.xml})
public class DubboServiceConsumer {private static final Logger logger LoggerFactory.getLogger(DubboServiceConsumer.class);Autowiredprivate DubboServiceTest dubboServiceTest;Testpublic void consumer(){int a 4, b 5;logger.info(消费dubbo服务....................);logger.info(String.format(a %d, b %d, ab %d, a, b, dubboServiceTest.calculate(a, b)));}
} dubbo服务消费者配置dubbo-consumer-example.xml ?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:contexthttp://www.springframework.org/schema/contextxmlns:dubbohttp://code.alibabatech.com/schema/dubboxsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsdhttp://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsddescriptiondubbo公共配置/descriptioncontext:property-placeholder locationclasspath:dubbo-example.properties /!-- 同一个工程只配置一份即可 --dubbo:application namehjz-dubbo ownerhjzgg/!-- 服务应用方调用的超时时间。默认不配置则以服务提供方的超时时间为准。check为false表示延迟加载dubbo依赖的服务--dubbo:consumer retries0 timeout${dubbo.consumer.timeout} checkfalse/!-- dubbo注册到zookeeper用于预发布或生产环境 --!-- dubbo:registry protocolzookeeper address${zookeeper.addr} / --!-- 像引用spring的bean服务一样引用dubbo提供的接口用于预发布和生产环境--!-- dubbo:reference iddubboServiceTest interfacecom.hjz.dubbo.api.DubboServiceTest / --!-- dubbo直连方式只用于开发或测试阶段 --dubbo:reference iddubboServiceTest interfacecom.hjz.dubbo.api.DubboServiceTest urldubbo://127.0.0.1:20880 /
/beans 四、dubbo测试 首先启动dubbo生产者然后运行消费者的测试类可以看到控制台中有如下信息输出 2016-09-25 19:36:08,502 INFO [com.hjz.dubbo.consumer.DubboServiceConsumer] - [DUBBO] 消费dubbo服务...................., dubbo version: 2.8.4, current host: 192.168.80.4
2016-09-25 19:36:08,761 INFO [com.hjz.dubbo.consumer.DubboServiceConsumer] - [DUBBO] a 4, b 5, ab 9, dubbo version: 2.8.4, current host: 192.168.80.4 五、总结 1.如果一个工程中有dubbo消费者也有dubbo生产者则dubbo:application namehjz-dubbo ownerhjzgg/配置只有一个就可以了。 2.测试环境一般采用dubbo直联方式生产环境一般将dubbo服务注册到zookeeper。 3.配置文件中 dubbo:reference iddubboServiceTest 和 dubbo:service refdubboServiceTest id和ref的对应的value要一致。 4.配置文件中 dubbo:service refdubboServiceTestref对应的value是服务的名称例如Service(dubboServiceTest)。 5.如果抛出下面异常 com.caucho.hessian.client.HessianRuntimeException: com.caucho.hessian.io.HessianFieldException: com.shine.ermp.dto.UserAccountDTO.invalidDate:
java.sql.Timestamp cannot be assigned from null dubbo服务提供者的配置文件中加上下面红色的代码。 dubbo:protocol namedubbo port20880 serializationjava/ 六、测试demo https://github.com/hjzgg/dubbo_demo 注测试demo工程是个maven工程eclipse可以通过 Check out as Maven Project from SCM 来导入即可URL:https://github.com/hjzgg/dubbo_demo.git 转载于:https://www.cnblogs.com/hujunzheng/p/5907035.html