dubbo服务程序员

java服务中间件之旅(一):dubbo入门

2016-08-14  本文已影响5376人  李健同学

前言

说起来这应该是博主的第一篇博客,平时博主一直都有记录笔记的习惯,都是以记录核心知识点的形式进行记录。工作几年,越发觉得分享自己的观点对于自身以及团队的成长是多么的关键,于是开始动手写这第一篇博客,也希望自己能够坚持下去。markdown语法用得不对,排版有问题请多包涵,也多提建议。文章本身的观点有不同看法,也尽情拍砖。
接下来的一段时间应该会使用较多的中间件,今天先来一篇最简单的dubbo入门,预告下一次的博客主题为“dubbo项目实践”,如果有时间,可能会自己尝试去实现一个简单的java中间件。废话不多说,开始我们今天的dubbo入门!

后端服务架构演化过程:

Paste_Image.png

针对某项目的架构演化过程:

项目架构演进过程中,给我感受最深的一点:所有项目演化过程其实都是大同小异,但最重要的是,去思考在什么阶段采用什么架构是最合适的,并在项目中去运用、解决实际的问题

dubbo服务简介

官方服务文档:

[http://dubbo.io/User+Guide-zh.htm#UserGuide-zh-%E8%83%8C%E6%99%AF][1]

非常详细,阅读前提:spring、redis / zookeeper、maven 等有一定的了解

dubbo服务架构

Paste_Image.png

节点说明:

参考文章:http://www.cnblogs.com/ghj1976/p/5316126.html

dubbo服务优点

开始我们的dubbo之旅

demo代码:

git@git.oschina.net:jianli/dubbo-demo.git

先来看下项目结构:

Paste_Image.png

dubbo-api 在此demo中作为公用的接口项目,包括接口,请求参数,与返回类
dubbo-server 作为服务生产者,提供服务(实现接口)
dubbo-custom 作为服务消费者,使用服务(调用接口)

项目代码我就不全贴了,git 上有,现在讲一下最基本的流程,以helloworld开始

1.安装启动zookeeper

ftp://ftp.kddilabs.jp/infosystems/apache/zookeeper/zookeeper-3.4.8/zookeeper-3.4.8.tar.gz

下载后解压

配置zookeeper的主要配置文件:
zoo.cfg:

tickTime=2000
dataDir=/Users/lijian/Desktop/1.4.0
clientPort=2181

通过bin/zkServer.sh start启动

导入项目

git clone

不多说

3.启动dubbo-server项目。

先看主要配置文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="
        http://code.alibabatech.com/schema/dubbo    http://code.alibabatech.com/schema/dubbo/dubbo.xsd
         http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
         http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">
        
        <context:component-scan
            base-package="com.lijian.**" />
  
        <context:annotation-config />
    
    <!-- 公共信息,也可以用dubbo.properties配置 -->
    <dubbo:application name="lalocal-server"/>
    <dubbo:registry address="zookeeper://127.0.0.1:2181"/>
     <dubbo:protocol name="dubbo" port="-1"/>
    <!-- 扫描注解包路径,多个包用逗号分隔,不填pacakge表示扫描当前ApplicationContext中所有的类 -->
    <dubbo:annotation package="com.lijian.dubbo.service" />
    </beans>

主要指定了应用名,注册中心地址,dubbo协议端口号(-1为自动分配,之后细讲),和注解扫描路径

编写接口的实现类

    package com.lijian.dubbo.service.impl;
    import com.alibaba.dubbo.config.annotation.Service;
    import com.lijian.dubbo.service.HelloService;
    @Service
    public class HelloServiceImplv1 implements HelloService{
    
        public String hello(String name) {
            return "Hello, "+name;
        }
    
    }

十分简单,注意Service是dubbo的注解,不是spring的Service

然后启动spring容器,最简单的,通过main方法启动:

public class MainZookeeperClass {
    @SuppressWarnings("resource")
    public static void main(String[] args){
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        context.start();
        System.out.println("服务已经启动...");
        try {
            System.in.read();
        } catch (IOException e) {
            e.printStackTrace();
        } // 按任意键退出
    }
}

4. 启动dubbo-custom项目

主要配置文件:

 <dubbo:application name="test-client"/>
    <dubbo:registry address="zookeeper://127.0.0.1:2181" />
    <dubbo:annotation package="com.lijian.dubbo.customer" />
    </beans>

比较简单,不多说

接口的引用UserAction:

package com.lijian.dubbo.customer.action;

import org.springframework.stereotype.Component;

import com.alibaba.dubbo.config.annotation.Reference;
import com.lijian.dubbo.service.HelloService;

@Component
public class UserAction {

    @Reference
    HelloService helloService;
    
    public String say(String a){
        return helloService.hello(a + a);
    }
}

主要是@Reference的注解

启动Main方法:

public class MainClass {
    public static void main(String[] args){
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        context.start();
        
        UserAction userAction = context.getBean(UserAction.class);
        String a = userAction.say("user ");
        System.out.println(a);
        
        try {
            System.in.read();
        } catch (IOException e) {
            e.printStackTrace();
        } // 按任意键退出
    }
}

控制台输出:

Paste_Image.png

5. 搭建dubbo服务的监控中心

从git 上下载dubbo-admin项目
https://github.com/alibaba/dubbo.git

dubbo-admin是一个web项目,需要使用web容器,jboss,tomcat都可以,方便起见,我们使用jetty

dubbo-admin 默认连接本地的2181端口,默认有root和guest两个帐号。这里我们采用默认的配置, 如果要改的话,改动/dubbo-admin/src/main/webapp/WEB-INF/dubbo.properties文件

启动dubbo-admin:

mvn jetty:run

然后登陆127.0.0.1:8080 去查看

至此,一个最简单的dubbo服务已经完成。回顾一下dubbo的服务架构,注册中心,生产者,消费者,容器,监控中心都有了😊。

下一篇博客,将为大家带来dubbo的实战讲解,讲我在dubbo中遇到的一些坑,以及常用的业务场景

上一篇下一篇

猜你喜欢

热点阅读