dubbox 入门demo

1、Dubbox简介

Dubbox 是一个分布式服务架构,其前身是阿里巴巴开源项目 Dubbo,被国内电商及互联网项目使用,后期阿里巴巴停止了该项目的维护,当当网便在 Dubbo 基础上进行优化,并继续维护,为了与原有的 Dubbo 区分,故将其命名为 Dubbox。

Dubbox 致力于提供高性能和透明话的 RPC 远程服务调用方案,以及 SOA 服务治理方案。简单的说,Dubbox 就是个服务框架,如果没有分布式的需全,其实是不需要用的,只有在分布式的时候,才有 Dubbox 这样的分布式服务架构需求 ,并且本质上是个服务调用的东西,说白了就是个远程服务调用的分布式架构。

dubbox 入门demo

节点角色说明:

Provider:暴露服务的服务提供方。

Consumer:调用远程服务的服务消费方。

Registry:服务注册与发现的注册中心。

Monitor:统计服务的调用次数和调用时间的监控中心。

Container:服务运行容器。

调用关系说明:

0、服务容器负责启动,加载,运行服务提供者。

1、服务提供者在启动时,向注册中心注册自己提供的服务。

2、服务消费者在启动时,向注册中心订阅自己所需的服务。

3、注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。

4、服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。

5、服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

2、注册中心 Zookeeper

1、Zookeeper 介绍

官方推荐使用 zookeeper 注册中心。注册中心负责服务地址的注册于查找,相当于目录服务,服务提供者和消费者只在启动时于注册中心交互,注册中心不转发请求,压力较小。

zookeeper 是 Appache Hadoop 的子项目,是一个树型的目录服务,支持变更推送,适合作为 Dubbox 服务的注册中心,工业强度较高,可用于生产环境。

2、Zookeeper 在 Linux (虚拟机)系统的安装

安装步骤:

第一步:安装 jdk (zookeeper 的服务需要依赖于 JVM 环境)。

第二步:把 zookeeper 的压缩包上传到 linux 系统 。

第三步:解压缩压缩包(版本视自己的情况而定,文中版本仅为事例)。

tar -zxvf zookeeper-3.4.6.tar.gz

第四步:进入 zookeeper-3.4.6 目录,创建 data 目录。

mkdir data

第五步:进入 conf 目录,把 zoo_sample.cfg 改名为 zoo.cfg。

cd conf

mv zoo_sample.cfg zoo.cfg

第六步:打开 zoo.cfg 文件,修改 data 属性:dataDir=/root/zookeeper-3.4.6/data (自己的 data 目录放在哪,就把路径写在哪)

dubbox 入门demo

3、Zookeeper 服务启动

进入 bin 目录,启动服务输入命令:./zkServer.sh start

输出以下内容表示启动成功

dubbox 入门demo

关闭服务输入命令:./zkServer.sh stop

输出已下信息表示关闭成功

dubbox 入门demo

查看状态输入命令:./zkServer.sh status

如果服务为启动状态,提示

dubbox 入门demo

如果服务为关闭状态,提示

dubbox 入门demo

3、Dubbox 本地 jar 包 部署与安装

Dubbox 的 jar 包并没有部署到 Maven 中央仓库中,在 Maven 的中央仓库中可以查找到 Dubbo 的最终版本是 2.5.3,阿里解散了 Dubbo 团队后由当当网继续维护此项目,并改名为 Dubbox,坐标不变,版本变更了,但是没有提交到中央仓库。

因此需要手动将 Dubbox 的 jar 包安装到自己的本地仓库中。

先将 dubbo-2.8.4.jar 包放到 d:\setup (我的是这样,视自己的情况而定),然后输入命令

mvn install:install-file -Dfile=d:\setup\dubbo-2.8.4.jar -DgroupId=com.alibaba -DartifactId=dubbo -Dversion=2.8.4 -Dpackaging=jar

4、配置离线约束(可选,这个步骤是为了在 application.xml 文件中配置 dubbo 时有提示)

1、先进入eclipse 的 preferences 选项,然后找到 XML Catalog

dubbox 入门demo

2、点击 Add ,选择 File System,打开预先下好的约束文件 dubbo.xsd

dubbox 入门demo

将key 设置为 :http://code.alibabatech.com/schema/dubbo/dubbo.xsd

5、入门小 demo

1、服务提供者开发

1)、创建 Maven 工程(war)dubboxdemo-service,在 pom.xml 文件中引入依赖

<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.0modelVersion>
  <groupId>com.itcast.demogroupId>
  <artifactId>dubboxdemo-serviceartifactId>
  <version>0.0.1-SNAPSHOTversion>
  <packaging>warpackaging>

  <properties>
        <spring.version>4.2.4.RELEASEspring.version>
   properties>

    <dependencies>

        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-contextartifactId>
            <version>${spring.version}version>
        dependency>
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-beansartifactId>
            <version>${spring.version}version>
        dependency>
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-webmvcartifactId>
            <version>${spring.version}version>
        dependency>
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-jdbcartifactId>
            <version>${spring.version}version>
        dependency>
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-aspectsartifactId>
            <version>${spring.version}version>
        dependency>
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-jmsartifactId>
            <version>${spring.version}version>
        dependency>
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-context-supportartifactId>
            <version>${spring.version}version>
        dependency>

        <dependency>
            <groupId>com.alibabagroupId>
            <artifactId>dubboartifactId>
            <version>2.8.4version>
        dependency>
        <dependency>
            <groupId>org.apache.zookeepergroupId>
            <artifactId>zookeeperartifactId>
            <version>3.4.6version>
        dependency>
        <dependency>
            <groupId>com.github.sgroschupfgroupId>
            <artifactId>zkclientartifactId>
            <version>0.1version>
        dependency>

        <dependency>
            <groupId>javassistgroupId>
            <artifactId>javassistartifactId>
            <version>3.11.0.GAversion>
        dependency>

    dependencies>
   <build>
      <plugins>
          <plugin>
              <groupId>org.apache.maven.pluginsgroupId>
              <artifactId>maven-compiler-pluginartifactId>
              <version>2.3.2version>
              <configuration>
                  <source>1.7source>
                  <target>1.7target>
              configuration>
          plugin>
          <plugin>
                <groupId>org.apache.tomcat.mavengroupId>
                <artifactId>tomcat7-maven-pluginartifactId>
                <configuration>

                    <port>8081port>

                    <path>/path>
                configuration>
            plugin>
      plugins>
    build>
project>

2)、在工程的 webapps 下创建 WEB-INF 文件夹,创建 web.xml 文件:

xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    version="2.5">

    <context-param>
        <param-name>contextConfigLocationparam-name>
        <param-value>classpath:applicationContext*.xmlparam-value>
    context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
    listener>

web-app>

3)、创建包 com.itcast.dubbodemo.service,用于存放业务接口,创建接口

1 package com.itcast.demo.service;
2
3 public interface UserService {
4
5     public String getName();
6 }

4)、创建业务实体类,创建包 com.itcast.dubbodemo.service.impl,用于存放业务实体类。创建业务实体类:

1 package com.itcast.demo.service.impl;
 2
 3 import com.alibaba.dubbo.config.annotation.Service;
 4 import com.itcast.demo.service.UserService;
 5
 6 @Service
 7 public class UserServiceImpl implements UserService {
 8
 9     @Override
10     public String getName() {
11         // TODO Auto-generated method stub
12         return "itcast";
13     }
14
15 }

注意:此时的 @Service 导的包是:com.alibaba.dubbo.config.annotation.Service ,如果是导的是 Spring 的包,获取的是本地的 Service,而我们是要获取远程的 Servie 服务,因此要注意

5)、编写配置文件

在 src/main/resources 下创建 applicationContext-service.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" xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
        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.xsd">

   <dubbo:application name="dubboxdemo-service"/>
   <dubbo:registry address="zookeeper://192.168.25.128:2181"/>
   <dubbo:annotation package="com.itcast.demo.service.impl"/>

beans>

注意:dubbo:registry 要填写自己的 zookeeper 所在的 linux 系统上的 ip 地址,端口号统一为 2181。

dubbo:annotation 用于扫描 @Service 注解

我的地址为: 192.168.25.128,自己 ip 地址是什么就写什么

dubbox 入门demo

6)、测试运行

tomcat7:run

2、服务消费者开发

1)、创建 Maven 工程(war)dubbodemo-web,在 pom.xml 引入依赖,同 dobbodemo-service 工程。区别就是把 tomcat 插件的运行端口号改为 8082(改成什么都 可以,只要不和 dubbodemo-service 一样就行)

2)、在 webapps 目录下创建 WEB-INF 目录,并创建 web.xml

xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    version="2.5">

    <filter>
        <filter-name>CharacterEncodingFilterfilter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>
        <init-param>
            <param-name>encodingparam-name>
            <param-value>utf-8param-value>
        init-param>
        <init-param>
            <param-name>forceEncodingparam-name>
            <param-value>trueparam-value>
        init-param>
    filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilterfilter-name>
        <url-pattern>/*url-pattern>
    filter-mapping>

  <servlet>
      <servlet-name>springmvcservlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>

      <init-param>
          <param-name>contextConfigLocationparam-name>
          <param-value>classpath:springmvc.xmlparam-value>
      init-param>
  servlet>

  <servlet-mapping>
      <servlet-name>springmvcservlet-name>
      <url-pattern>*.dourl-pattern>
  servlet-mapping>

web-app>

3)、拷贝业务接口

将 “dubbodemo-service” 工程的 com.itcast.dubbodemo.service 包以及下面的接口拷贝至此工程

dubbox 入门demo

4)、编写 Controller

1 package com.itcast.demo.controller;
 2
 3 import org.springframework.stereotype.Controller;
 4 import org.springframework.web.bind.annotation.RequestMapping;
 5 import org.springframework.web.bind.annotation.ResponseBody;
 6
 7 import com.alibaba.dubbo.config.annotation.Reference;
 8 import com.itcast.demo.service.UserService;
 9
10 @Controller
11 @RequestMapping("/user")
12 public class UserController {
13     @Reference
14     private UserService userService;
15
16     @RequestMapping("/showName")
17     @ResponseBody
18     public String showName() {
19         return userService.getName();
20     }
21 }

注意:此时装配 UserService 时不用注解 “@Autowired”,该注解是装配本地的 UserService ,而我们要装配的是远程的 UserSrevice,因此这里使用 @Referenc。

5)、编写 spring 配置文件

在 src/main/resources 下创建 applicationContext-web.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" xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
        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.xsd">

    <mvc:annotation-driven >
        <mvc:message-converters register-defaults="false">
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <constructor-arg value="UTF-8" />
            bean>
        mvc:message-converters>
    mvc:annotation-driven>

    <dubbo:application name="dubboxdemo-web"/>
    <dubbo:registry address="zookeeper://192.168.25.128:2181"/>
    <dubbo:annotation package="com.itcast.demo.controller"/>

beans>

6)、测试运行

tomcat7:run

最后在浏览器输入:http://localhost:8082/user/showName.do 查看结果

dubbox 入门demo

注意:要把 dubbodemo-service 和 dubbodemo-web 的服务都启动起来,并确保 zookeeper 的服务为开启状态。

Original: https://www.cnblogs.com/elementplay/p/10838780.html
Author: 赵妹儿
Title: dubbox 入门demo

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/575080/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Vue学习

    安装卸载 &#x5B89;&#x88C5;node.js&#x3002;&#x8FDB;&#x5165;&#x5B98;&#…

    Java 2023年6月5日
    095
  • JVM调优案例分析(4)

    1.概述 前面三篇介绍了处理Java虚拟机内存问题的知识与工具,在处理实际项目的问题 时,除了知识与工具外,经验也是一个很重要的因素。因此本章将与读者分享几个比较 有代表性的实际案…

    Java 2023年6月13日
    081
  • 我的第一个springboot starter

    在springboot中有很多starter,很多是官方开发的,也有是个人或开源组织开发的。这些starter是用来做什么的呐? 一、认识starter 所谓的starter,在s…

    Java 2023年6月9日
    064
  • 使用 Hexo 搭建个人独立博客

    一.前言 一直在博客园写博客,已经写了几年了,博客园也挺好用的,用户多,阅读文章的也多,互动也多。但是自己总有一个想搭建一个独立博客的想法,作为一个 Coder,当然是想自己写,最…

    Java 2023年6月9日
    058
  • SpringMVC执行流程

    SpringMVC三大核心组件 HandlerMapping处理器映射器:建立地址与方法的映射。 HandlerMapping负责根据用户请求url找到Handler即处理器,sp…

    Java 2023年5月30日
    069
  • 一致性hash算法

    一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了C…

    Java 2023年6月9日
    077
  • WC2022入职集训课程【职场礼仪与职业素养】

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Java 2023年6月5日
    062
  • Java语言编码规范(Java Code Conventions) 转载

    Java语言编码规范(Java Code Conventions) 晨光(Morning) 本文档讲述了Java语言的编码规范,较之陈世忠先生《c++编码规范》的浩繁详尽,此文当属…

    Java 2023年5月29日
    066
  • 使用IDEA进行javaDoc时报错:javadoc: 错误-无效的标记: –source-path

    可能是因为idea版本太高 其javadoc生成工具不能使用java8版本了,亦或是需要做一些设置 idea生成javadoc文件使用java8版本时报错 在这里修改一下java版…

    Java 2023年6月6日
    096
  • Java判定一个数值是否在指定的开闭区间范围内

    对于开闭区间,在数学中的表示方式通常为 () 和 [],小括号代表开放区间,中括号代表封闭区间,而它们的区别主要在于是否包含 = 等于号,开闭区间通常会分为以下一些情形: (1, …

    Java 2023年6月8日
    044
  • electron 应用开发优秀实践

    vivo 互联网前端团队-Yang Kun 一、背景 在团队中,我们因业务发展,需要用到桌面端技术,如离线可用、调用桌面系统能力。什么是桌面端开发?一句话概括就是: 以 Windo…

    Java 2023年6月15日
    065
  • Java字符串处理:随机字符串,提取数字,身份证号码

    一、随机字符串 /** * * @param count &#x968F;&#x673A;&#x5B57;&#x7B26;&#x4E32;&…

    Java 2023年6月5日
    053
  • Redis的安装使用

    @Test public void testKey() throws Exception { //创建客户端指定连接服务器端主机ip和端口,端口不指定时默认使用6379 Jedis…

    Java 2023年6月7日
    070
  • scrapy框架之item与pipelines

    继续以起点小说为例子,我们要做的就是把对象存储到item(类似于一个字典)中,在通过pipelines持久化到txt文件中。之前我们在运行爬虫的后面加”-o 爬虫名称&…

    Java 2023年6月5日
    093
  • 周转换日期区间,SQL函数

    CREATE DEFINER=mysqladmin@% FUNCTION convertWeekToDate(reportYear INT,reportWeek INT) RETU…

    Java 2023年6月9日
    059
  • JAVA复习总体大纲

    1 java基础. [1].变量— 数据类型 变量名=值;数据类型:1.基本数据类型. byte[1字节] short[2字节] int[4字节] long[8字节] …

    Java 2023年6月5日
    067
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球