dubbo入门

41 篇文章 0 订阅
26 篇文章 0 订阅

一:dubbo简介

  1. Dubbo:一个分布式、高性能、透明化的RPC服务框架.
  2. 作用:提供服务自动注册、自动发现等高效服务治理方案.
  3. Dubbo架构图            

          3.1 Provider :提供者,服务发布方.

          3.2 Consumer:消费者, 调用服务方

          3.3 Container:Dubbo容器.依赖于Spring容器.

          3.4 Registry: 注册中心.当Container启动时把所有可以提供的服务列表上Registry中进行注册.

                3.4.1 作用:告诉Consumer提供了什么服务和服务方在哪里.

          3.5 Monitor:监听器

          3.6 虚线都是异步访问,实线都是同步访问

          3.7 蓝色虚线:在启动时完成的功能

          3.8 红色虚线(实线)都是程序运行过程中执行的功能

          3.9 所有的角色都是可以在单独的服务器上.所以必须遵守特定的协议.

                 

    4,运行原理:   

       4.0 启动容器,相当于在启动Dubbo的Provider

       4.1 启动后会去注册中心进行注册.注册所有可以提供的服务列表

       4.2 在Consumer启动后会去Registry中获取服务列表和Provider的地址.进行订阅.

       4.3 当Provider有修改后,注册中心会把消息推送给Consummer

             4.3.1 使用了观察者设计模式(又叫发布/订阅设计模式)

       4.4 根据获取到的Provider地址,真实调用Provider中功能.

            4.4.1 在Consumer方使用了代理设计模式.创建一个Provider方类的一个代理对象.通过代理对象获取Provider中真实功能,起到保护Provider真实功能的作用.

       4.5 Consumer和Provider每隔1分钟向Monitor发送统计信息,统计信息包含,访问次数,频率等.

 

二:Dubbo支持的注册中心         

  1. Zookeeper

           1.1 优点:支持网络集群

           1.2 缺点:稳定性受限于Zookeeper

     2,Redis

            2.1 优点:性能高.

            2.2 缺点:对服务器环境要求较高.

      3,Multicast

            3.1 优点:面中心化,不需要额外安装软件.

            3.2 缺点:建议同机房(局域网)内使用

      4,Simple

             4.1 适用于测试环境.不支持集群.

Dubbo支持的协议    

      1, Dubbo

               1.1 Dubbo官方推荐的协议.

               1.2 本质:使用NIO和线程池进行处理.

               1.3 缺点:大文件传输时可能出现文件传输失败问题.

       2,RMI

                2.1 JDK提供的协议,远程方法调用协议.

                2.2 缺点:偶尔连接失败.

                 2.3 优点:JDK原生,不需要进行额外配置(导入jar)

        3,Hession

                  3.1 优点:基于http协议,http请求支持.

                  3.2 缺点:需要额外导入jar,并在短连接时性能低

四:dubbo控制台安装

                 1,到地址 https://github.com/alibaba/dubbo 下载dubbo源码

                 2,找到对应的文件目录(../dubbo-admin)打包成war,上传至tomcat工作目录

                  3,解压:

                           unzip dubbo-admin-2.5.4.war   -d   dubbo

                  3,vim dubbo-admin/WEB-INF/dubbo.properties

                         修改zookeeper注册中心地址和root用户名和密码                          

dubbo.registry.address=zookeeper://192.168.2.107:2181?backup=192.168.2.108:2181,192.168.2.110:2181
dubbo.admin.root.password=root
dubbo.admin.guest.password=root

                   4,先启动zookeeper集群,再启动tomcat。  

五:编码:

               1,聚合分布式项目架构:

                            dubbo-demo-parent                       (父项目)

                                      dubbo-demo-service          (service接口)

                                      dubbo-demo-provider        (service实现:provider)

                                      dubbo-demo-consumer        (consumer)

                             provider和consumer都依赖与service,导入相关jar包:

                 2,dubbo-demo-service   只有一个接口:  pom.xml什么jar也不依赖                

public interface DemoService {

	void sayHello(String name);
	
}

                  3,dubbo-demo-provider              

<properties>
		<spring-version>4.1.6.RELEASE</spring-version>
		<dubbo-version>2.6.0</dubbo-version>
	</properties>

	<dependencies>
		<!-- service -->
		<dependency>
			<groupId>com.reyco.dubbo</groupId>
			<artifactId>dubbo-demo-service</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>
		<!-- spring -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>${spring-version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${spring-version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${spring-version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
			<version>${spring-version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
			<version>${spring-version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>${spring-version}</version>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>com.101tec</groupId>
			<artifactId>zkclient</artifactId>
			<version>0.10</version>
		</dependency>
		
		<!-- dubbo -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>dubbo</artifactId>
			<version>${dubbo-version}</version>
		</dependency>
	</dependencies>

          DemoServiceImpl.java

public class DemoServiceImpl implements DemoService {

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

                applicationContext.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:p="http://www.springframework.org/schema/p" 
    xmlns:context="http://www.springframework.org/schema/context"    
    xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
    xsi:schemaLocation="http://www.springframework.org/schema/beans      
                        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd      
                        http://www.springframework.org/schema/context      
                        http://www.springframework.org/schema/context/spring-context-3.1.xsd      
                        http://code.alibabatech.com/schema/dubbo        
    					http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
    					    
    <!-- 提供服务应用信息,用于计算依赖关系 -->
    <dubbo:application name="demo-provider"/>
    
    <!-- 使用zookeeper注册中心暴露服务 -->
    <dubbo:registry address="zookeeper://192.168.2.107:2181?backup=192.168.2.108:2181,192.168.2.110:2181"/>
    
    <!-- 用dubbo协议在20880端口暴露服务 -->
    <dubbo:protocol name="dubbo" port="20880"/>
    
    <!-- 具体的实现bean -->
    <bean id="demoService" class="com.reyco.dubbo.service.impl.DemoServiceImpl"/>
    <!-- 声明需要暴露的服务接口,写操作可以设置 retries="0",避免重复调用SOA服务  -->
    <dubbo:service retries="0" interface="com.reyco.dubbo.service.DemoService" ref="demoService"/>
     
     <!-- 在注解扫描 -->
    <!-- <dubbo:annotation package="com.reyco.ddubbo.service"/>  -->
         
</beans>    

               applicationContext.java                  

public class ApplicationContext {
	public static void main(String[] args) throws IOException {
		ClassPathXmlApplicationContext  context = new ClassPathXmlApplicationContext("applicationContext.xml");
		context.start();
		System.out.println("provider start...");
		System.in.read();
	}
}

         4 dubbo-demo-consumer:  

<properties>
		<spring-version>4.1.6.RELEASE</spring-version>
		<dubbo-version>2.6.0</dubbo-version>
	</properties>
	
	<dependencies>
		<!-- entity -->
		<dependency>
			<groupId>com.reyco.dubbo</groupId>
			<artifactId>dubbo-demo-service</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>
		<!-- spring -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>${spring-version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${spring-version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${spring-version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
			<version>${spring-version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
			<version>${spring-version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>${spring-version}</version>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>com.101tec</groupId>
			<artifactId>zkclient</artifactId>
			<version>0.10</version>
		</dependency>



		<!-- dubbo -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>dubbo</artifactId>
			<version>${dubbo-version}</version>
		</dependency>
	</dependencies>

                  applicationContext.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:p="http://www.springframework.org/schema/p"    
    xmlns:context="http://www.springframework.org/schema/context"    
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
    xsi:schemaLocation="http://www.springframework.org/schema/beans      
                        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd      
                        http://www.springframework.org/schema/context      
                        http://www.springframework.org/schema/context/spring-context-3.1.xsd      
                        http://www.springframework.org/schema/mvc      
                        http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
                        http://code.alibabatech.com/schema/dubbo        
    					http://code.alibabatech.com/schema/dubbo/dubbo.xsd">  
    					  
    <dubbo:application name="demo-consumer"/>
    
    <dubbo:registry address="zookeeper://192.168.2.107:2181?backup=192.168.2.108:2181,192.168.2.110:2181"/>
    
    <dubbo:reference id="demoService" interface="com.reyco.dubbo.service.DemoService"/>
    
   <!--  <dubbo:annotation package="com.reyco.dubbo.controller"/> -->
    
</beans>   

                 applicationContext.java      

public class ApplicationContext {
	
	public static void main(String[] args) throws IOException {
		
		ClassPathXmlApplicationContext  context = new ClassPathXmlApplicationContext("applicationContext.xml");
		context.start();
		System.out.println("consumer start...");
		DemoService demoService = (DemoService)context.getBean("demoService");
		demoService.sayHello("张三");
	}
	
}

              

注意: dubbo-demo-provider官方建议启动方式:       

public class ApplicationContext {
	public static void main(String[] args) throws IOException {
		Main.main(args);
	}
}

               applicationContext.xml存放位置:

             

             

 

 

                   

           

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

java的艺术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值