目录:

1、Dubbox简介

2、注册中心Zookeeper

2.1、Zookeeper 介绍

2.2、Zookeeper在Linux系统的安装

2.3、Zookeeper服务启动

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

4、配置离线约束

5、入门小Demo

5.1、服务提供者开发

5.1.1、创建Maven工程(WAR)dubboxdemo-service  ,在pom.xml中引入依赖

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

5.1.3、创建业务接口

5.1.4、创建业务实现类

5.1.5、编写配置文件

5.1.6、测试运行

5.2、服务消费者开发

5.2.1、创建Maven工程(WAR)dubboxdemo-web ,在pom.xml引入依赖

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

5.2.3、拷贝业务接口

5.2.4、编写Controller

5.2.5、编写spring配置文件

5.2.6、测试运行


1、Dubbox简介

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

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

节点角色说明:

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

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

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

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

Container: 服务运行容器。

调用关系说明:

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

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

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

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

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

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

2、注册中心Zookeeper

2.1、Zookeeper 介绍

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

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


2.2、Zookeeper在Linux系统的安装:

安装步骤:

第一步:安装jdk。详细见:https://blog.csdn.net/MyronCham/article/details/82895024

第二步:把zookeeper的压缩包(zookeeper-3.4.6.tar.gz)上传到Linux系统。

安装 lrzsz上传下载软件:yum install lrzsz            (rz上传、sz下载)

[root@localhost local]# rz

第三步:解压缩压缩包:

[root@localhost local]# tar -zxvf zookeeper-3.4.5.tar.gz

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

[root@localhost local]# cd zookeeper-3.4.6

[root@localhost zookeeper-3.4.6]# mkdir data

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

[root@localhost zookeeper-3.4.6]# cd conf

[root@localhost conf]# mv zoo_sample.cfg zoo.cfg

第六步:打开zoo.cfg,修改dataDir属性。

[root@localhost data]# pwd
                 /usr/local/zookeeper-3.4.6/data

[root@localhost conf]# vim zoo.cfg


2.3、Zookeeper服务启动

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

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

3、查看状态:./zkServer.sh status

如果未启动状态,提示:

如果启动状态,提示:

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、配置离线约束

地址:http://code.alibabatech.com/schema/dubbo/dubbo.xsd

5、入门小Demo

5.1、服务提供者开发

开发步骤:

5.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.0</modelVersion><groupId>com.myron.dubboxdemo</groupId><artifactId>dubboxdemo-service</artifactId><version>0.0.1-SNAPSHOT</version><packaging>war</packaging>  <properties>       <spring.version>4.2.4.RELEASE</spring.version></properties>    <dependencies><!-- Spring --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</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-webmvc</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-aspects</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jms</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>${spring.version}</version></dependency>  <!-- dubbo相关 --><dependency><groupId>com.alibaba</groupId><artifactId>dubbo</artifactId><version>2.8.4</version>            </dependency><dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.4.6</version></dependency><dependency><groupId>com.github.sgroschupf</groupId><artifactId>zkclient</artifactId><version>0.1</version></dependency>       <dependency><groupId>javassist</groupId><artifactId>javassist</artifactId><version>3.11.0.GA</version></dependency>     </dependencies><build>  <plugins><plugin>  <groupId>org.apache.maven.plugins</groupId>  <artifactId>maven-compiler-plugin</artifactId>  <version>2.3.2</version>  <configuration>  <source>1.7</source>  <target>1.7</target>  </configuration>  </plugin>  <plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><configuration><!-- 指定端口 --><port>8081</port><!-- 请求路径 --><path>/</path></configuration></plugin></plugins>  </build>
</project>

5.1.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"> <!-- 加载spring容器 --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext*.xml</param-value></context-param><listener>      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>
</web-app>

5.1.3、创建业务接口

创建包com.nari.dubbodemo.service,用于存放业务接口,创建接口。

package com.myron.dubbodemo.service;
/*** 业务接口* @author Administrator**/
public interface UserService {  public String getName();
}

5.1.4、创建业务实现类

创建包com.nari.dubbodemo.service.impl ,用于存放业务实现类。创建业务实现类:

package com.myron.dubbodemo.service.impl;
import com.alibaba.dubbo.config.annotation.Service;
import com.myron.dubbodemo.service.UserService;
@Service
public class UserServiceImpl implements UserService {public String getName() {      return "myron";}
}

注意:Service注解与原来不同,需要引入com.alibaba包下的。

5.1.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.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"></beans>

注意:dubbo:annotation用于扫描@Service注解。

5.1.6、测试运行

tomcat7:run

5.2、服务消费者开发

开发步骤:

5.2.1、创建Maven工程(WAR)dubboxdemo-web ,在pom.xml引入依赖

同“dubboxdemo-service”工程。区别就是把tomcat插件的运行端口改为8082 。

5.2.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"> <!-- 解决post乱码 --><filter><filter-name>CharacterEncodingFilter</filter-name>     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>utf-8</param-value></init-param><init-param>  <param-name>forceEncoding</param-name>  <param-value>true</param-value>  </init-param>  </filter><filter-mapping><filter-name>CharacterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>      <servlet><servlet-name>springmvc</servlet-name>   <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 指定加载的配置文件 ,通过参数contextConfigLocation加载--><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext-web.xml</param-value></init-param></servlet>  <servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping>
</web-app>

5.2.3、拷贝业务接口

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

5.2.4、编写Controller

package com.myron.dubboxdemo.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.myron.dubbodemo.service.UserService;
@Controller
@RequestMapping("/user")
public class UserController {@Referenceprivate UserService userService;    @RequestMapping("/showName")@ResponseBodypublic String showName(){return userService.getName();}
}

5.2.5、编写spring配置文件

<?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.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsdhttp://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 服务 --><dubbo:application name="dubboxdemo-web" /><dubbo:registry address="zookeeper://192.168.25.132:2181"/><dubbo:annotation package="com.nari.dubboxdemo.controller" />
</beans>

5.2.6、测试运行

tomcat7:run

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

电商(3)之Dubbox框架相关推荐

  1. 通过Dapr实现一个简单的基于.net的微服务电商系统(二)——通讯框架讲解

    首先感谢张队@geffzhang公众号转发了上一篇文章,希望广大.neter多多推广dapr,让云原生更快更好的在.net这片土地上落地生根. 书接上回通过Dapr实现一个简单的基于.net的微服务电 ...

  2. 电商网站(Django框架)—— 大纲内容与基本功能分析

    1.  项目架构 2.  数据库表结构 3.  数据库读写分离 4.  Django读写分离配置 新建utils/db_router.py 课后阅读资料 http://python.usyiyi.cn ...

  3. 电商产品2| ERP框架+登录页 低保真原型

    登录页面(同时是登出返回界面) *登录页背景可用企业宣传图 ERP框架展示 登入默认页 总体包括顶部栏,左边栏,中间内容区 顶部栏为固定栏 左边栏根据个人权限设置模块选择性展示 中间内容栏根据岗位显示 ...

  4. 垂直电商架构进化之路

    作者:张增.邓良驹,分别为乐视云计算电商云团队负责人,乐视云计算高级开发工程师 来自:高效运维 1. 电商系统发展过程 电商网站在不同时期的架构复杂度有所不同: 初创期:商品类型少,业务复杂度低,系统 ...

  5. 通过Dapr实现一个简单的基于.net的微服务电商系统(十九)——分布式事务之Saga模式...

    目录: 一.通过Dapr实现一个简单的基于.net的微服务电商系统 二.通过Dapr实现一个简单的基于.net的微服务电商系统(二)--通讯框架讲解 三.通过Dapr实现一个简单的基于.net的微服务 ...

  6. 通过Dapr实现一个简单的基于.net的微服务电商系统(十八)——服务保护之多级缓存...

    很久没有更新dapr系列了.今天带来的是一个小的组件集成,通过多级缓存框架来实现对服务的缓存保护,依旧是一个简易的演示以及对其设计原理思路的讲解,欢迎大家转发留言和star 目录: 一.通过Dapr实 ...

  7. 通过Dapr实现一个简单的基于.net的微服务电商系统(十七)——服务保护之动态配置与热重载...

    在上一篇文章里,我们通过注入sentinel component到apigateway实现了对下游服务的保护,不过受限于目前变更component需要人工的重新注入配置以及重启应用更新componen ...

  8. 通过Dapr实现一个简单的基于.net的微服务电商系统(十六)——dapr+sentinel中间件实现服务保护...

    dapr目前更新到了1.2版本,在之前4月份的时候来自阿里的开发工程师发起了一个dapr集成Alibaba Sentinel的提案,很快被社区加入到了1.2的里程碑中并且在1.2 release 相关 ...

  9. 通过Dapr实现一个简单的基于.net的微服务电商系统(十二)——istio+dapr构建多运行时服务网格...

    多运行时是一个非常新的概念.在 2020 年,Bilgin Ibryam 提出了 Multi-Runtime(多运行时)的理念,对基于 Sidecar 模式的各种产品形态进行了实践总结和理论升华.那到 ...

  10. 通过Dapr实现一个简单的基于.net的微服务电商系统(十一)——一步一步教你如何撸Dapr之自动扩/缩容...

    上一篇我们讲到了dapr提供的bindings,通过绑定可以让我们的程序轻装上阵,在极端情况下几乎不需要集成任何sdk,仅需要通过httpclient+text.json即可完成对外部组件的调用,这样 ...

最新文章

  1. pig脚本不需要后缀名(python tempfile模块生成pig脚本临时文件,执行)
  2. photoshop修复面部的皱纹
  3. Keepalived+HAProxy基于读写分离方式实现discuz论坛
  4. SQL-2 查找入职员工时间排名倒数第三的员工所有信息
  5. Docker挂了,数据如何找回
  6. 精通ASP.NET MVC ——路由
  7. CNCC2018 即将开幕,报名优惠截止倒计时5天!
  8. oracle去除表中字段中特殊符号('tab','空格','换行符','回车')——目前没找到可以一次性替换表中所有异常数据的方法,只能对字段逐一去除,如果有还希望留言赐教
  9. ASP.NET错误处理的方式(一)
  10. Apabi Reader for iOS正式发布 全面支持“苹果”(iPad/iPhone/iPod Touch)家族
  11. android 下载instagram动态中图片的demo
  12. cryptojs php,CryptoJS简单使用方法
  13. 微信公众号,图文编辑超链接中,没有外部链接只能增加公众号链接是什么情况?
  14. 主机甲和主机乙之间使用后退N帧协议(GBN)传输数据,甲的发送窗口为1000,数据帧长为1000字节,信道带宽为100Mb/s,乙每收到一个数据帧......[数据传输率]错题总结
  15. CentOS7常用软件安装配置说明
  16. python barplot宽度,如何在seaborn barplot上设置宽度
  17. html文件的启示标记,某html学习心得分享.ppt
  18. python-requests 模拟登陆京东
  19. 三菱M80操作介绍_三菱PLC操作
  20. 了解iPhone OS框架

热门文章

  1. 基于Pycharm运行李沐老师的深度学习课程代码
  2. abi:用json解析和对比linux平台下elf文件
  3. LoadLibrary下错误返回126错误码排查过程
  4. 计算机工程+cssci,XC中文学术期刊等级分类目录
  5. SQL注入--报错和盲注
  6. 智能家庭监控开发框架
  7. CPU被挖矿,Redis竟是内鬼,
  8. 阿里云王牌架构师一问开发者:我需要一个高并发的架构,系统要改造成微服务吗
  9. Shell中的date命令
  10. 科恩二进制静态漏洞检测工具BinAbsInspector