Dubbo第一章:Dubbo-admin编译和Dubbo简单入门

背景

Dubbo的开源人梁飞在内部的交流会上宣布重启dubbo的维护和更新,具体PPT内容请看我的个人订阅号。

因此本文基于2017-12-10号的维护的版本dubbo-2.5.7。

这里为何从Dubbo-admin开始,这不是最重要的部分,但是却是dubbo源码编译最简单的部分。

准备工作

按照zookeeper服务(参考单机安装zookeeper安装

下载dubbo源码
https://github.com/alibaba/dubbo/releases/tag/dubbo-2.5.7

当然也可以直接从我的github上面直接下载已经编译好了的war包
https://github.com/BambooZhang/dubbo-study

dubbo-admin编译

解压后这里只用到一个项目就是dubbo-admin

cd D:\git_space\dubbo-dubbo-2.5.7\dubbo-dubbo-2.5.7\dubbo-admin
mvn package -Dmaven.skip.test=true 

出现下面的结果则说明编译成功


[INFO]
[INFO] --- maven-war-plugin:2.2:war (default-war) @ dubbo-admin ---
[INFO] Packaging webapp
[INFO] Assembling webapp [dubbo-admin] in [D:\git_space\dubbo-dubbo-2.5.7\dubbo-dubbo-2.5.7\dubbo-admin\target\dubbo-admin-2.5.7]
[INFO] Processing war project
[INFO] Copying webapp resources [D:\git_space\dubbo-dubbo-2.5.7\dubbo-dubbo-2.5.7\dubbo-admin\src\main\webapp]
[INFO] Webapp assembled in [880 msecs]
[INFO] Building war: D:\git_space\dubbo-dubbo-2.5.7\dubbo-dubbo-2.5.7\dubbo-admin\target\dubbo-admin-2.5.7.war
[INFO] WEB-INF\web.xml already added, skipping
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 24.516 s
[INFO] Finished at: 2017-12-10T17:38:17+08:00
[INFO] Final Memory: 19M/244M
[INFO] ------------------------------------------------------------------------

部署dubbo-admin到tomcat

把target\dubbo-admin-2.5.7下面的文件都拷贝到tomcat/webapps/ROOT下面

这里写图片描述

修改配置dubbo.properties
zookeeper地址修改为自己安装的ip地址,默认是127.0.0.1

dubbo.registry.address=zookeeper://192.168.0.91:2181
dubbo.admin.root.password=root
dubbo.admin.guest.password=guest

启动dubbo-admin

首先启动zookeeper服务,在启动tomcat
启动完成访问localhost:8080
默认账号密码都是root
这里写图片描述

Dubbo服务提供者和消费者demo

dubbo-admin-2.5.7.war管理中心
dubbo-provider服务器提供者
dubbo-consumer服务器消费者

spring版本:4.3.9.RELEASE

dubbo-provider服务器提供者

这里写图片描述

pom

<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.bamboo</groupId>
  <artifactId>dubbo-provider</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>dubbo-provider</name>
  <url>http://maven.apache.org</url>

	<repositories>
		<repository>
			<id>maven-ali</id>
			<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
			<releases>
				<enabled>true</enabled>
			</releases>
			<snapshots>
				<enabled>true</enabled>
				<updatePolicy>always</updatePolicy>
				<checksumPolicy>fail</checksumPolicy>
			</snapshots>
		</repository>

	</repositories>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     <spring.version>4.3.9.RELEASE</spring.version>  
  </properties>
  
  
    <dependencies>  
        <dependency>  
            <groupId>com.alibaba</groupId>  
            <artifactId>dubbo</artifactId>  
            <version>2.5.7</version>  
            <exclusions>  
                <exclusion>  
                    <groupId>org.springframework</groupId>  
                    <artifactId>spring</artifactId>  
                </exclusion>  
            </exclusions>  
        </dependency>  
        <dependency>  
            <groupId>com.github.sgroschupf</groupId>  
            <artifactId>zkclient</artifactId>  
            <version>0.1</version>  
        </dependency>  
        <!-- spring相关 -->  
        <dependency>  
            <groupId>org.springframework</groupId>  
            <artifactId>spring-core</artifactId>  
            <version>${spring.version}</version>  
        </dependency>  
        <dependency>  
            <groupId>org.springframework</groupId>  
            <artifactId>spring-beans</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-jdbc</artifactId>  
            <version>${spring.version}</version>  
        </dependency>  
        <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-aop</artifactId>  
            <version>${spring.version}</version>  
        </dependency>  
        <dependency>  
            <groupId>org.springframework</groupId>  
            <artifactId>spring-tx</artifactId>  
            <version>${spring.version}</version>  
        </dependency>  
        <dependency>  
            <groupId>org.springframework</groupId>  
            <artifactId>spring-orm</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>  
        </dependency>  
        <dependency>  
            <groupId>org.springframework</groupId>  
            <artifactId>spring-jms</artifactId>  
            <version>${spring.version}</version>  
        </dependency>  
        
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

applicationProvider.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 ">   
    <!-- 具体的实现bean -->  
    <bean id="providerService" class="com.bamboo.dubbo_provider.ProviderServiceImpl" />  
    <!-- 提供方应用信息,用于计算依赖关系 -->  
    <dubbo:application name="dubbo_provider"  />    
    <!-- 使用multicast广播注册中心暴露服务地址   
    <dubbo:registry address="multicast://localhost:1234" />-->   
    <!-- 使用zookeeper注册中心暴露服务地址 127.0.0.1:2181 -->  
    <dubbo:registry address="zookeeper://192.168.0.91:2181" />     
    <!-- 用dubbo协议在20880端口暴露服务 -->  
    <dubbo:protocol name="dubbo" port="29014" />  
    <!-- 声明需要暴露的服务接口 -->  
    <dubbo:service interface="com.bamboo.service.ProviderService" ref="providerService" />  
</beans> 

java

service

package com.bamboo.service;

public interface  ProviderService {

	public String sayHello(String name);
}

ProviderServiceImpl

package com.bamboo.dubbo_provider;

import com.bamboo.service.ProviderService;

public class ProviderServiceImpl implements ProviderService {  
  
    public String sayHello(String name) {         
        return "Hello:"+name+"你好,你好~~";  
    }  
  
}

main.java

package com.bamboo.dubbo_provider;

import java.io.IOException;

import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * dubbo 服务提供端
 * @author bamboo
 */
public class App 
{
	public static void main(String[] args) {  
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(    
                new String[]{"applicationProvider.xml"});
        context.start();   
        System.out.println("提供者服务已注册成功");    
        System.out.println("请按任意键取消提供者服务");    
        try {  
            System.in.read();//让此程序一直跑,表示一直提供服务  
        } catch (IOException e) {         
            e.printStackTrace();  
        }    
    }
}

运行

log4j:WARN No appenders could be found for logger (org.springframework.core.env.StandardEnvironment).
log4j:WARN Please initialize the log4j system properly.
提供者服务已注册成功
请按任意键取消提供者服务

dubbo-consumer服务器消费者

这里写图片描述

pom

<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.bamboo</groupId>
  <artifactId>dubbo-consumer</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>dubbo-consumer</name>
  <url>http://maven.apache.org</url>

		<repositories>
		<repository>
			<id>maven-ali</id>
			<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
			<releases>
				<enabled>true</enabled>
			</releases>
			<snapshots>
				<enabled>true</enabled>
				<updatePolicy>always</updatePolicy>
				<checksumPolicy>fail</checksumPolicy>
			</snapshots>
		</repository>

	</repositories>
	
	
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     <spring.version>4.3.9.RELEASE</spring.version>  
  </properties>

   <dependencies>  
   
        <!-- 添加dubbo依赖 -->  
        <dependency>  
            <groupId>com.alibaba</groupId>  
            <artifactId>dubbo</artifactId>  
            <version>2.5.7</version>  
            <exclusions>  
                <exclusion>  
                    <groupId>org.springframework</groupId>  
                    <artifactId>spring</artifactId>  
                </exclusion>  
            </exclusions>  
        </dependency>  
        <!-- 添加zk客户端依赖 -->  
        <dependency>  
            <groupId>com.github.sgroschupf</groupId>  
            <artifactId>zkclient</artifactId>  
            <version>0.1</version>  
        </dependency>  
        <!-- spring相关 -->  
        <dependency>  
            <groupId>org.springframework</groupId>  
            <artifactId>spring-core</artifactId>  
            <version>${spring.version}</version>  
        </dependency>  
        <dependency>  
            <groupId>org.springframework</groupId>  
            <artifactId>spring-beans</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-jdbc</artifactId>  
            <version>${spring.version}</version>  
        </dependency>  
        <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-aop</artifactId>  
            <version>${spring.version}</version>  
        </dependency>  
        <dependency>  
            <groupId>org.springframework</groupId>  
            <artifactId>spring-tx</artifactId>  
            <version>${spring.version}</version>  
        </dependency>  
        <dependency>  
            <groupId>org.springframework</groupId>  
            <artifactId>spring-orm</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>  
        </dependency>  
        <dependency>  
            <groupId>org.springframework</groupId>  
            <artifactId>spring-jms</artifactId>  
            <version>${spring.version}</version>  
        </dependency>  
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

applicationConsumer.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="dubbo_consumer" />     
      <!-- 使用multicast广播注册中心暴露发现服务地址127.0.0.1:2181 -->  
    <dubbo:registry  protocol="zookeeper" address="zookeeper://192.168.0.91:2181" />       
      <!-- 生成远程服务代理,可以和本地bean一样使用demoService -->  
    <dubbo:reference id="providerService" interface="com.bamboo.service.ProviderService" />  
</beans>

###java
service

package com.bamboo.service;

public interface  ProviderService {

	public String sayHello(String name);
}

main

package com.bamboo.dubbo_consumer;

import java.io.IOException;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.bamboo.service.ProviderService;

/**
 * dubbo 服务消费端
 * @author bamboo
 *
 */
public class App 
{
	public static void main(String[] args) {  
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(  
                new String[] { "applicationConsumer.xml" });  
          
        context.start();  
        ProviderService providerService = (ProviderService) context.getBean("providerService");  
  
        System.out.println(providerService.sayHello("bamboo"));  
        System.out.println("Press any key to exit.");    
        try {
            System.in.read();  
        } catch (IOException e) {         
            e.printStackTrace();  
        }    
  
    }  
}

运行

log4j:WARN No appenders could be found for logger (org.springframework.core.env.StandardEnvironment).
log4j:WARN Please initialize the log4j system properly.
Hello:bamboo你好,你好~~
Press any key to exit.

查看监控列表
这里写图片描述

dubboadmin扩展功能

容错与屏蔽
顾名思义就是当服务提供者出现异常时,消费者是否能够正常处理异常返回预想格式服务,防止崩溃信息抛出到客户

服务降级
超时降级 —— 主要配置好超时时间和超时重试次数和机制,并使用异步机制探测恢复情况
失败次数降级 —— 主要是一些不稳定的API,当失败调用次数达到一定阀值自动降级,同样要使用异步机制探测回复情况
故障降级 —— 如要调用的远程服务挂掉了(网络故障、DNS故障、HTTP服务返回错误的状态码和RPC服务抛出异常),则可以直接降级
限流降级 —— 当触发了限流超额时,可以使用暂时屏蔽的方式来进行短暂的屏蔽

负载均衡
dubbo提供了三个基本的负载均衡策略,分别是 随机访问、轮询、最少并发
https://blog.csdn.net/qq_22152261/article/details/80300597

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值