最近项目中有用到dubbo技术框架作为分布式服务的架子,作为用了一段时间的使用者来讲,dubbo确实是一个不错的SOA框架,用着很舒服,而且还比较轻量,这里写一个例子来简单介绍一下dubbo.
在任何的SOA框架中,面向服务都得需要三个参与者,第一个是服务提供者,第二个是消费者,第三个是提供服务路由的服务监控者。在dubbo中同样也是基于这三部分的。
1.服务提供者:基于接口编程,提供对该接口的实现,把接口注册到注册中心。
2.注册中心:提供服务路由的管理中心,方便消费者找到提供者
3.消费者:根据路由到的服务提供者,调用接口服务实现。
Dubbo的路由规则,在服务中有接口类、组名、版本号唯一定位一个服务,大体的格式如下:
com.DemoService/group1/0.0.1,如果对于同一个服务有不同的实现,可以通过组名和版本号区分,而消费者在调用服务时,也是需要指定对应的组名和版本号。
以下是一个很简单的例子:
首先是服务端:
1.先定义一个接口类
package service; public interface DemoService { public String sayHello(String name); }
2.增加一个该接口的实现
import service.DemoService; public class DemoServiceImpl implements DemoService{ @Override public String sayHello(String name) { // TODO Auto-generated method stub return "你好," + name; } }
3.服务暴露
对于服务的暴露,有一个地方是要注意的,就是最后一句话System.out.println("暴露成功");dubbo服务是需要一直提供的,这句话的含义就是为了阻塞线程。但是在linux后台启动服务的方式下,这样的方式有时候是不起作用的,根据线程阻塞的原理,使用了第二种的方式,以下会有介绍。
import java.io.IOException; import service.DemoService; import com.alibaba.dubbo.config.ApplicationConfig; import com.alibaba.dubbo.config.ProtocolConfig; import com.alibaba.dubbo.config.RegistryConfig; import com.alibaba.dubbo.config.ServiceConfig; public class Main { public static void main(String[] args) throws IOException { // TODO Auto-generated method stub //加载应用配置 ApplicationConfig config = new ApplicationConfig(); config.setName("1111"); RegistryConfig registry = new RegistryConfig(); //registry.setProtocol(iniUtil.getValue("zookeeper.protocol")); registry.setAddress("zookeeper://192.168.6.184:2181"); ProtocolConfig protocol = new ProtocolConfig(); protocol.setName("dubbo"); protocol.setPort(20191); protocol.setThreads(200); //应用服务启动 DemoService service = new DemoServiceImpl(); ServiceConfig<DemoService> appService = new ServiceConfig<DemoService>(); appService.setApplication(config); appService.setRegistry(registry); appService.setProtocol(protocol); appService.setInterface(DemoService.class); appService.setRef(service); //增加组名和版本 // appService.setGroup("group1"); // appService.setVersion("0.0.1"); appService.export(); System.out.println("暴露成功"); System.in.read(); } }
线程阻塞方式
synchronized (obj) { try { obj.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
再看看注册中心
1.对于注册中心,只需要启动zookeeper即可,真正的配置是在消费者和提供者中配置的。
registry.setAddress("zookeeper://192.168.6.184:2181");
这里要注意正确地址的写法,zookeeper要写完整
再来看看消费者
消费者只需要提供注册中心地址,以及要获取的服务接口(如有需要组名和版本号也是需要的),就可以直接获取服务调用了。
import service.DemoService; import com.alibaba.dubbo.config.ApplicationConfig; import com.alibaba.dubbo.config.ReferenceConfig; import com.alibaba.dubbo.config.RegistryConfig; public class ClientMain { public static void main(String[] args) { // TODO Auto-generated method stub // 当前应用配置 ApplicationConfig application = new ApplicationConfig(); application.setName("yyy"); // 连接注册中心配置 RegistryConfig registry = new RegistryConfig(); registry.setAddress("zookeeper://192.168.6.184:2181"); // 注意:ReferenceConfig为重对象,内部封装了与注册中心的连接,以及与服务提供方的连接 // 引用远程服务 ReferenceConfig<DemoService> reference = new ReferenceConfig<DemoService>(); // 此实例很重,封装了与注册中心的连接以及与提供者的连接,请自行缓存,否则可能造成内存和连接泄漏 reference.setApplication(application); reference.setRegistry(registry); // 多个注册中心可以用setRegistries() reference.setInterface(DemoService.class); // 和本地bean一样使用xxxService DemoService re = reference.get(); // 注意:此代理对象内部封装了所有通讯细节,对象较重,请缓存复用 System.out.println(re.sayHello("ss")); } }
相关推荐
dubbo使用例子,首先api的生产jar包,然后在serviceone和ControllerOne引用,使用就可以。
Dubbo框架和SSM框架搭建。
dubbo框架源码,之前的积分太高,我改低了
阿里巴巴 开源框架dubbo视频讲解
dubbo小例子,简单实用,主要就是dubbo的框架,代码量很少
分布式dubbo框架实际项目使用解说一目了然公司大佬总结的如有不懂可联系
介绍dubbo的应用,主要是dubbo入门帮助,有详细的例子。
dubbo是阿里巴巴推出的一个分布式服务框架,分为消费者和提供者
Dubbo框架设计与扩展Dubbo框架设计与扩展Dubbo框架设计与扩展Dubbo框架设计与扩展
一个用spring配置的dubbo的小例子,适合初学者学习
dubbo 框架 设计 Java并发 ppt
对Dubbo全面的讲解文档,包括framework、RPC、高并发解决方案、服务层设计技术。
引入 dubbo框架 需要引用dubbo标签,dubbo.xsd 可以解决标签不识别的问题
一个用spring配置的dubbo的小例子,适合初学者学习
Dubbo框架设计原则.pdf Dubbo框架设计原则.pdf Dubbo框架设计原则.pdf Dubbo框架设计原则.pdf ........
zookeeper和dubbo简单例子,使用maven进行构建
一个dubbo的小例子,之前没怎么学懂,这是再次学习之后改写的小例子,希望能够给初学dubbo的同学一点点帮助
在学习dubbo框架过程中,自己写的简单 consume-provider模式
dubbo框架原理讲解,从基础RPC应用到高级RPC实现原理,讲解了dubbo框架的运用最佳实践。0基础学会dubbo开发,进阶高级分布式应用开发
taobao dubbo框架