1 dubbo是什么

2 依赖说明

2.1 可以如何使用dubbo

服务提供端:

  1. 独立的服务(以普通的java程序形式)
  2. 集成在应用中(在应用中增加远程服务能力)

消费端:

  1. 在应用中调用远程服务。
  2. 也可是在服务提供者中调用远程服务。

2.2 dubbo的使用步骤

  1. 引入dubobo相关依赖
  2. 配置dubbo框架(提供了3种配置方式)
  3. 开发服务
  4. 配置服务
  5. 启动、调用
2.2.1 引入dubbo相关依赖
<dependencies>
  <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>dubbo</artifactId>
      <version>2.6.6</version>
  </dependency>
<!-- 这里我们使用netty --> 
<dependency>
      <groupId>io.netty</groupId>
      <artifactId>netty-all</artifactId>
      <version>4.1.32.Final</version>
  </dependency>
</dependencies>
2.2.2 配置dubbo框架

Dubbo 采用全 Spring 配置方式,透明化接入应用,对应用没有任何 API 侵入,只需用 Spring 加载 Dubbo 的配置即可,Dubbo 基于 Spring 的 Schema 扩展进行加载。如果不想使用 Spring 配置,可以通过 API 的方式 进行调用。还可以在spring中基于注解的方式进行配置。

3种配置方式:

  • spring schema xml 方式 适用于spring应用
  • 注解方式 适用于spring应用, 需要 2.6.3 及以上版本
  • API方式 API方式使用范围说明:API 仅用于 OpenAPI, ESB, Test, Mock 等系统集成。普通 服务提供方或消费方,请采用XML 配置方式使用 Dubbo
2.2.2.1 spring Schema XML 方式

服务提供者
示例服务:
服务接口定义(该接口需单独打包,在服务提供方和消费方共享):
DemoService.java

public interface DemoService {
    String sayHello(String name);
}

在服务提供方实现接口
DemoServiceImpl.java

public class DemoServiceImpl implements DemoService {
    public String sayHello(String name) {
        return "Hello " + name;
    }
}

用 Spring 配置声明暴露服务 provider.xml(放在类目录下):

<?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://dubbo.apache.org/schema/dubbo"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
        http://dubbo.apache.org/schema/dubbo
http://dubbo.apache.org/schema/dubbo/dubbo.xsd"> 
<!-- 提供方应用信息,用于计算依赖关系 -->
	<dubbo:application name="hello-world-app" /> 
<!-- 使用multicast广播注册中心暴露服务地址 -->
	<dubbo:registry address="multicast://224.5.6.7:1234" /> 
<!-- 用dubbo协议在20880端口暴露服务 -->
    <dubbo:protocol name="dubbo" port="20880" />
<!-- 声明需要暴露的服务接口 -->
    <dubbo:service interface="com.study.mike.dubbo.DemoService"
ref="demoService" />
<!-- 和本地bean一样实现服务 -->
    <bean id="demoService"
class="com.study.mike.dubbo.provider.DemoServiceImpl" />
</beans>

注意dubbo命名空间的指定,以及配置了哪些项。

启动服务程序(这里是作为独立的java程序启动)
Provider.java:

import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Provider {
    public static void main(String[] args) throws Exception {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("provider.xml");
        context.start();
        System.in.read(); // 按任意键退出 }
}

服务消费者
通过 Spring 配置引用远程服务
consumer.xml:

<?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://dubbo.apache.org/schema/dubbo"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
4.3.xsd
http://www.springframework.org/schema/beans/spring-beans-
http://dubbo.apache.org/schema/dubbo
http://dubbo.apache.org/schema/dubbo/dubbo.xsd"> 
<!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
    <dubbo:application name="consumer-of-helloworld-app" /> <!-- 使用multicast广播注册中心暴露发现服务地址 -->
    <dubbo:registry address="multicast://224.5.6.7:1234" />
<!-- 生成远程服务代理,可以和本地bean一样使用demoService -->
    <dubbo:reference id="demoService"
interface="com.study.mike.dubbo.DemoService" />
</beans>

加载Spring配置,并调用远程服务
Consumer.java

import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.apache.dubbo.demo.DemoService;
public class Consumer {
    public static void main(String[] args) throws Exception {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("consumer.xml");
        context.start();
        DemoService demoService = (DemoService) context.getBean("demoService"); // 获取远程服务代理
} }