zoukankan      html  css  js  c++  java
  • 初识Dubbo+Zookeeprt搭建SOA项目

    由于工作中天天和Dubbo打交道,天天写对外服务,所以有必要自己动手搭建一个Dubbo+zookeeper项目来更更深层次的认识Dubbo

    首先了解一下SOA:

    英文名称(Service Oriented Ambiguity)中文的意思是面向服务的架构。好处是可以实现代码的复用,以及对数据访问的控制。实现SOA架构时,常用的有Dubbo,WebService,Dubbox,还有就是HttpClient.

    1.Dubbo和Zookeeper的基本概念

    Dubbo: 一个分布式、高性能、透明化的RPC服务框架,可以提供服务自动注册、自动发现等高效服务治理方案.下面是它的架构图:



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

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

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

    4 Registry: 注册中心.Container启动时把所有可以提供的服务列表上Registry中进行注册. 告诉Consumer提供了什么服务和服务方在哪里.

    5 Monitor:监听器

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

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

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

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

    1. 运行原理:

    0 启动容器,相当于在启动DubboProvider

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

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

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

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

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

    Dubbo的注册中心

    1. Zookeeper(Zookeeper是一个高性能,开源的分布式协调服务的应用,它提供了许多功能,使分布式应用可以基于它实现更高级的服务。它的出现可以使我们更好的治理分布式服务。下载地址http://zookeeper.apache.org/)

    1.1 优点:支持网络集群

    1.2 缺点:稳定性受限于Zookeeper

    2. Redis(Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。)

    2.1 优点:性能高.

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

    这里使用zookeeper作为注册中心。

    好了,有了基本了解之后开始搭建项目!

    首先创建一个maven项目,这个项目只提供接口


    DubboService提供两个方法

    pom文件为:

    接下来实现接口,我们在创建一个项目,这个项目就是服务的提供者:

    pom文件为:

     

     

    Srping-context的配置文件为:

    服务的具体实现为:

    最后我们创建服务的消费者

     消费者的spring配置文件相当简单

    <dubbo:annotation package="com.yzy.consumer"/>是用来配置dubbo注解的扫描路径

    Consumer的实现

    注意:这里的@reference是Dubbo的注解,因为我们配置Dubbo的扫描路径所以可以使用这个注解自动装配。

    这样。简单的项目构架就搭建起来了,赶紧测试一下吧,老铁!

    首先启动zookeeper 客户端

    运行zkServer.cmd

     然后我们运行 服务的提供者Provider

     

     可以看到已经向注册中心中注册可服务!

    接下来运行消费端:

    成功调用到接口并返回了数据!(数据库的信息我就不粘了!)

    结束!

  • 相关阅读:
    Restful api 返回值重复的问题
    fastDFS遇到的并发问题recv cmd: 0 is not correct, expect cmd: 100
    忽略警告@SuppressWarnings的用法
    Mysql 一些命令记录
    python 操作excel实现替换特定内容
    python 提取目录中特定类型的文件
    python使用tkinter无法获取输入框的值
    python使用tkinter无法给顶层窗体的输入框设定默认值
    游戏基础知识第一弹
    python 3.7.4 安装 opencv
  • 原文地址:https://www.cnblogs.com/yzy18/p/9537654.html
Copyright © 2011-2022 走看看