一、dubbo的实现原理

dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的RPC实现服务的输出和输入功能,可以和Spring框架无缝集成。

dubbo框架是基于Spring容器运行的。

RPC远程过程调用

远程过程调用协议是一种通过网络从远程计算机程序上请求服务,而不需要了解网络底层技术的协议。

RPC协议假定某些传输协议的存在,如TCP或者UDP,为通信程序之间携带信息数据。

在OSI网络通信模型中,RPC跨越了传输层和应用层。

RPC的优点:使得开发包括网络分布式多程序在内的应用程序更加容易。

二、架构图

dubbo monitor如何关闭_dubbo monitor如何关闭

注册中心(registry):生产者在此注册并发布内容,消费者在此订阅并接收发布的内容。

消费者(consumer):客户端,从注册中心获取到方法,可以调用生产者中的方法。

生产者(provider):服务端,生产内容,生产前需要依赖容器(先启动容器)。

容器(container):生产者在启动执行的时候,必须依赖容器才能正常启动(默认依赖的是spring容器),dubbo技术不能脱离spring框架。2.5.3版本的dubbo默认依赖spring2.5版本,可以选用spring4.5以下的版本 。2.5.7版本的dubbo默认依赖spring4.3.10版本,可以选择任意的spring版本。

监控中心(monitor):是dubbo提供的一个jar工程。主要功能是监控服务端和消费端的使用数据。如:服务端是什么,有多少接口,多少方法,调用次数,压力信息等,客户端有多少,调用过哪些服务端,调用了多少次等。 

 三、简单的demo案例

1、代码架构

dubbo monitor如何关闭_dubbo monitor如何关闭_02

 2、pom依赖

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.zhouzy.dubbo</groupId>
  <artifactId>zhouzyDubbo</artifactId>
  <version>0.0.1-SNAPSHOT</version>

  <name>zhouzyDubbo</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>

  <dependencies>
	<!-- https://mvnrepository.com/artifact/com.alibaba/dubbo -->
	<dependency>
	  <groupId>com.alibaba</groupId>
	  <artifactId>dubbo</artifactId>
	  <version>2.5.3</version>
	</dependency>
	 
	<dependency>
	  <groupId>com.101tec</groupId>
	  <artifactId>zkclient</artifactId>
	  <version>0.10</version>
	</dependency>
	<dependency>
	  <groupId>org.springframework</groupId>
	  <artifactId>spring-context</artifactId>
	  <version>4.0.5.RELEASE</version>
	</dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
     <plugins>
          <plugin>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-maven-plugin</artifactId>
          </plugin>
      </plugins>
  </build>
</project>

3、生产者接口

UserService.java

package com.zhouzy.dubbo.service.provider;

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

4、生产者实现类

UserServiceImpl.java

package com.zhouzy.dubbo.service.provider;


public class UserServiceImpl implements UserService{

	@Override
	public String sayHello(String name) {
		System.out.println("hello:"+name);
		return "hello:"+name;
	}

}

5、生产者dubbo文件

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://code.alibabatech.com/schema/dubbo"
   xsi:schemaLocation="http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans.xsd
   http://code.alibabatech.com/schema/dubbo
   http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!--定义了提供方应用信息,用于计算依赖关系;在 dubbo-admin 或 dubbo-monitor 会显示这个名字,方便辨识-->
<dubbo:application name="zhouzyProvider" owner="zzy" organization="dubbox"/>
<!--使用 zookeeper 注册中心暴露服务,注意要先开启 zookeeper-->
<dubbo:registry address="zookeeper://localhost:2181"/>
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880" />
<!--使用 dubbo 协议实现定义好的 api.PermissionService 接口-->
<dubbo:service interface="com.zhouzy.dubbo.service.provider.UserService" ref="userService" protocol="dubbo" />
<!--具体实现该接口的 bean-->
<bean id="userService" class="com.zhouzy.dubbo.service.provider.UserServiceImpl"/>
</beans>

6、启动生产者

ProviderTest.java

package com.zhouzy.dubbo;

import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * Unit test for simple App.
 */
public class ProviderTest {
    public static void main(String[] args) {
    	ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("provider.xml");
        context.start();
        System.out.println("dubbo服务提供端已启动....");
        try {
			System.in.read();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

7、配置消费者dubbo文件

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://code.alibabatech.com/schema/dubbo"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
   http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<dubbo:application name="zhouzyConsumer" owner="zzy" organization="dubbox"/>
<!--向 zookeeper 订阅 provider 的地址,由 zookeeper 定时推送-->
<dubbo:registry address="zookeeper://localhost:2181"/>
<!--使用 dubbo 协议调用定义好的 api.PermissionService 接口-->
<dubbo:reference id="userService" interface="com.zhouzy.dubbo.service.provider.UserService"/>
</beans>

8、测试消费者调用生产者

ConsumerTest.java

package com.zhouzy.dubbo;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.zhouzy.dubbo.service.provider.UserService;


public class ConsumerTest{

	public static void main(String[] args) {
		 	ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( "consumer.xml" );
		    context.start();
		    System.out.println("dubbo服务消费端已启动...");
		    UserService userService = (UserService)context.getBean( "userService" );// 获取远程服务代理
		    String hello = userService.sayHello( "张三" );//执行远程方法
		    System.out.println(hello);//显示调用结果
		    try {
				System.in.read();
			} catch (Exception e) {
				e.printStackTrace();
			}
	}

}

四、测试

1、启动zookeeper

windows目录:D:\SOFT\zookeeper\bin,双击zkServer.cmd启动

dubbo monitor如何关闭_spring_03

 2、部署dubboAdmin管理后台

下载地址:

3、运行生产者ProviderTest

dubbo monitor如何关闭_spring_04

 dubbo-admin后台管理页面:

dubbo monitor如何关闭_dubbo monitor如何关闭_05

4、运行消费者ConsumerTest

dubbo monitor如何关闭_dubbo_06

  dubbo-admin后台管理页面:

dubbo monitor如何关闭_spring_07