DOSGI-CXF和zookeeper的整合
来源:互联网 发布:最强手机象棋软件 编辑:程序博客网 时间:2024/05/21 07:55
上一篇文章中描述了在osgi的环境中如何发布webserivce,如何在spring-dm中注入webservice服务对象,或者普通的调用方式,这里我们主要讲下如何将webserivce服务发布到zookeeper上,主要是这方面的资料非常之少,只有官方的零星资料,无法让你做个直观的理解,这里总结下让大家可以了解下。
相比之前的方案,无论是使用spring-dm还是使用普通的webserivce对象发现方式都有个缺点,需要关心webserivce发布地址等参数,这个有时候会让人很烦,如果我们将普通的osgi服务发布成webservice服务后,还需要在客户端去配置下。这里我们介绍个方法不需要再配置这种参数,那就是将这种服务发布到zookeeper上,至于zookeeper是做什么用的,网上资料很多,我这里就以偏概全说下:是用来统一管理分布式服务的,我这里使用的osgi框架是felix,我就以felix做例子将。操作步骤如下:
第一步、将几个关键的jar包加入到我们的环境下,例如:cxf-dosgi-ri-discovery-local-1.6.0、cxf-dosgi-ri-discovery-distributed-zookeeper-server-config-1.6.0、cxf-dosgi-ri-discovery-distributed-zookeeper-server-1.6.0、cxf-dosgi-ri-discovery-distributed-1.6.0、zookeeper-3.3.2、org.apache.felix.fileinstall-3.4.2.jar;如果你使用的是DOSGI-CXF的单包模式,则不需要关心这些。
第二步、下载解压,启动zookeeper服务器,如何操作网上资料一大片,这里不再多说,保证端口在2181就就可以了。
第三步、将zookeeper配置文件org.apache.cxf.dosgi.discovery.zookeeper.cfg放在felix的安装目录下(注意felix的安装目录是可以在启动时传入参数配置的),这个文件的内容如下:
zookeeper.host = 127.0.0.1zookeeper.port = 2181zookeeper.timeout = 3000
第四步、发布服务,这个和上一步中发布服务的方式是一样的,发布后可以查看服务信息,可以使用zooinspector来观测发布的服务信息。
先下载这软件,下载地址:https://issues.apache.org/jira/secure/attachment/12436620/ZooInspector.zip,
然后解压后,通过cmd进入build目录,然后执行命令:java -jar zookeeper-dev-ZooInspector.jar,则会看到如下图的信息(注意这里的图片只是个例子,和当前代码不是很符合),如图:
也可以使用zookeeper的客户端的get命令来查看,命令如:
get /osgi/service_registry/g2/cxf/test/service/ICxfTestService/0.0.0.0#3456##cxf-test-service。
总之格式特点就是:/osgi/service_registry/发布的服务的接口的全名/地址#端口##服务上下文。
第五步、调用也需要那加个jar包,另外也需要配置zookeeper的配置文件如第三步中,另外在spring的配置文件中,配置如下:
<osgi:reference id="dinnerServiceRef" interface="org.apache.cxf.dosgi.samples.springdm.DinnerService"/> <bean class="org.apache.cxf.dosgi.samples.springdm.client.DinnerServiceConsumer" init-method="start"> <property name="dinnerService" ref="dinnerServiceRef"/> </bean></beans>
在这里,并不需要关心webservice的发布地址、端口等参数,这些东西dosgi-cxf已经自动帮我们做了,其实原理也很简单,dosgi-cxf和zookeeper进行交互获取到zookeeper上发布的webservice信息,然后根据这个信息动态生成webservice代理对象,然后通过spring-dm注入到调用对象中。而且这种方式有个非常大的好处是,如果我们要把我们的一些提供服务的组件切分出去,单独搞个系统,然后在这个系统上将服务发布为webservice,而这个时候调用端(客户端)的组件是不需要做修改的,只需要全局范围内配置个zookeeper就行了,这才符合组件化的思路,试想下如果没有这个机制,难道我们要修改每个调用端的配置,将这个webservice的地址都配置进去吗?而且今后webservice地址变了呢?我们需要一个个去找哪些地方调用了,然后再改一遍配置,想想都觉得现在很幸福。这里的代码和上一篇代码中的一致,这里没有贴。
参考文档:
http://cxf.apache.org/dosgi-architecture.html
http://www.cnblogs.com/Mainz/p/3548396.html
- DOSGI-CXF和zookeeper的整合
- CXF-DOSGI整合问题的处理
- 关于DOSGI-CXF整合到SpringDM上的解决办法
- Spring DM中整合CXF-DOSGi
- cxf-dosgi 发布webservice
- cxf-dosgi模块功能说明
- CXF和Spring MVC的整合
- CXF-DOSGI学习笔记(二)-OSGI Declare Service注入的实现
- osgi学习笔记3之集成Spring-DM的cxf-DOSGI HelloWorld
- cxf和spring整合
- cxf和spring整合
- spring和cxf整合
- springmvc 和 cxf整合
- dubbo和zookeeper的整合使用
- SpringBoot下的Dubbo和Zookeeper整合
- zookeeper+dubbo和spring的整合
- cxf、spring和maven整合
- (四)WebService之CXF和Web程序的整合
- 对文件进行异或加解密的方法
- 每天一个linux命令(6):rmdir 命令
- Android 模拟表单上传 多图片上传
- jmeter https
- 正则表达式
- DOSGI-CXF和zookeeper的整合
- 深入了解Spring AOP
- Java并发编程:线程池的使用
- 在BCB中使用多线程实例
- maven的一些介绍
- 断点设置
- 《Android 开发工程师面试指南》
- 数据的交换输出
- CALayer