Dubbo是Alibaba开源的分布式服务框架,作为一个开源的微服务框架,dubbo作为RPC框架,使各层的调用极大的解耦。
服务是围绕服务提供方和服务消费方的,服务提供方实现服务,而服务消费方调用服务。
以往的RPC框架,都是直接暴露地址给服务调用者,这样一来就把敏感的IP地址暴露给了服务调用者,而dubbo则是采用了 注册中心来调度调用地址,并且服务提供者有多个的情况下进行负载均衡,通俗的讲就是消费者并不知道自己调用的服务具体在哪里,只需要知道跟注册中心要就ok了
话不多说,先来看看怎么使用dubbo:
因为之前项目上用的是dubbox,需要自己去github上拿下来安装到本地仓库,这里我就直接用maven 仓库的dubbo2.5.3了
首先:看一下工程目录结构
分为服务提供者和消费者工程,其中服务提供者工程又分 api 和impl工程,消费者因为需要调用服务端接口所以也需要用到 api工程。
api 工程 先定义一个服务接口 :
package com.wangjn;
/**
* Created by Administrator on 2017/5/9.
*/
public interface DemoService {
public String sayHello();
}
impl 工程 实现接口
package com.wangjn;
/**
* Created by Administrator on 2017/5/9.
*/
public class DemoServiceImpl implements DemoService{
@Override
public String sayHello() {
return "Hello!";
}
}
spring 配置
<?xml version="1.0" encoding="UTF-8"?>
<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="service" />
<!-- 使用注册中心暴露服务地址 -->
<dubbo:registry address="zookeeper://127.0.0.1:2181" />
<dubbo:consumer check="false"/>
<!-- 监控服务 -->
<!--<dubbo:monitor protocol="${dubbo.monitor.protocol}" />-->
<!-- 用dubbo协议暴露服务 -->
<dubbo:protocol name="dubbo" port="8858"/>
<!-- 扫描注解包路径,多个包用逗号分隔,不填pacakge表示扫描当前ApplicationContext中所有的类 -->
<!-- <dubbo:annotation package="com.wangjn"/>-->
<!-- 声明需要暴露的服务接口 -->
<dubbo:service interface="com.wangjn.DemoService"
ref="demoService" />
<bean id="demoService" class="com.wangjn.DemoServiceImpl" />
</beans>
启动类:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* Created by Administrator on 2017/5/9.
*/
public class Start {
private static Logger logger = LoggerFactory.getLogger(Start.class);
private static Start instance;
/**
* 获取默认单例
*
* @return 单例
*/
public static Start getInstance() {
if (instance == null) {
synchronized (Start.class) {
if (instance == null)
instance = new Start();
}
}
return instance;
}
public void startup() {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
new String[] { "applicationContext.xml" });
context.start();
}
public static void main(String[] args) {
getInstance().startup();
logger.info("service run success!!!");
while (true) {
}//执行完后程序自动与注册中心断开联系,加个死循环不让与中心断开
}
}
消费者工程:
测试类:
package com.wangjn;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* Created by Administrator on 2017/5/9.
*/
public class DemoConsumer {
private static Logger logger = LoggerFactory.getLogger(DemoService.class);
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
new String[] { "applicationContext.xml" });
context.start();
DemoService demoService = (DemoService) context.getBean("demoService");
String hello = demoService.sayHello();
logger.info(hello);
}
}
spring 配置:
<?xml version="1.0" encoding="UTF-8"?>
<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="service-consumer" />
<!-- 使用注册中心暴露服务地址 -->
<dubbo:registry address="zookeeper://127.0.0.1:2181" />
<dubbo:consumer check="false"/>
<!-- 扫描注解包路径,多个包用逗号分隔,不填pacakge表示扫描当前ApplicationContext中所有的类 -->
<dubbo:reference id="demoService"
interface="com.wangjn.DemoService" />
</beans>
启动服务类,将dubbo 服务注册到注册中心
Paste_Image.png消费者测试类 打印出 hello!
Paste_Image.png至此 只是dubbo的最基本使用
网友评论