Dubbo实现RPC调用使用入门

Stella981
• 阅读 542
  • 使用Dubbo进行远程调用实现服务交互,它支持多种协议,如Hessian、HTTP、RMI、Memcached、Redis、Thrift等等。由于Dubbo将这些协议的实现进行了封装了,无论是服务端(开发服务)还是客户端(调用服务),都不需要关心协议的细节,只需要在配置中指定使用的协议即可,从而保证了服务提供方与服务消费方之间的透明。
    另外,如果我们使用Dubbo的服务注册中心组件,这样服务提供方将服务发布到注册的中心,只是将服务的名称暴露给外部,而服务消费方只需要知道注册中心和服务提供方提供的服务名称,就能够透明地调用服务,后面我们会看到具体提供服务和消费服务的配置内容,使得双方之间交互的透明化。

    示例场景

    我们给出一个示例的应用场景:
    服务方提供一个搜索服务,对服务方来说,它基于SolrCloud构建了搜索服务,包含两个集群,ZooKeeper集群和Solr集群,然后在前端通过Nginx来进行反向代理,达到负载均衡的目的。
    服务消费方就是调用服务进行查询,给出查询条件(满足Solr的REST-like接口)。

    应用设计

    基于上面的示例场景,我们打算使用ZooKeeper集群作为服务注册中心。注册中心会暴露给服务提供方和服务消费方,所以注册服务的时候,服务先提供方只需要提供Nginx的地址给注册中心,但是注册中心并不会把这个地址暴露给服务消费方,如图所示:

    我们先定义一下,通信双方需要使用的接口,如下所示:

    01

    package org.shirdrn.platform.dubbo.service.rpc.api;

    02

     

    03

    public interface SolrSearchService {

    04

     

    05

    String search(String collection, String q, ResponseType type, int start, int``rows);

    06

     

    07

    public enum ResponseType {

    08

    JSON,

    09

    XML

    10

    }

    11

    }

    基于上图中的设计,下面我们分别详细说明Provider和Consumer的设计及实现。

    • Provider服务设计

    Provider所发布的服务组件,包含了一个SolrCloud集群,在SolrCloud集群前端又加了一个反向代理层,使用Nginx来均衡负载。Provider的搜索服务系统,设计如下图所示:

    上图中,实际Nginx中将请求直接转发内部的Web Servers上,在这个过程中,使用ZooKeeper来进行协调:从多个分片(Shard)服务器上并行搜索,最后合并结果。我们看一下Nginx配置的内容片段:

    01

    user  nginx;

    02

    worker_processes  4;

    03

     

    04

    error_log  /var/log/nginx/error.log warn;

    05

    pid        /var/run/nginx.pid;

    06

     

    07

     

    08

    events {

    09

    worker_connections  1024;

    10

    }

    11

     

    12

     

    13

    http {

    14

    include       /etc/nginx/mime.types;

    15

    default_type  application/octet-stream;

    16

     

    17

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

    18

    '$status $body_bytes_sent "$http_referer" '

    19

    '"$http_user_agent" "$http_x_forwarded_for"';

    20

     

    21

    access_log  /var/log/nginx/access.log  main;

    22

     

    23

    sendfile        on;

    24

    #tcp_nopush     on;

    25

     

    26

    keepalive_timeout  65;

    27

     

    28

    #gzip  on;

    29

     

    30

    upstream master {

    31

    server slave1:8888 weight=1;

    32

    server slave4:8888 weight=1;

    33

    server slave6:8888 weight=1;

    34

    }

    35

     

    36

    server {

    37

    listen 80;

    38

    server_name master;

    39

    location / {

    40

    root /usr/share/nginx/html/solr-cloud;

    41

    index  index.html index.htm;

    42

    proxy_pass   [http://master;](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fmaster%253B%2F)

    43

    include /home/hadoop/servers/nginx/conf/proxy.conf;

    44

    }

    45

    }

    46

    }

    运行说明

    首先保证服务注册中心的ZooKeeper集群正常运行,然后启动SolrSearchServer,启动的时候直接将服务注册到ZooKeeper集群存储中,可以通过ZooKeeper的客户端脚本来查看注册的服务数据。一切正常以后,可以启动运行客户端SearchConsumer,调用SolrSearchServer所实现的远程搜索服务。

  • 核心技术:Maven,Springmvc mybatis shiro, Druid, Restful, Dubbo, ZooKeeper,Redis,FastDFS,ActiveMQ,Nginx 
    1.     项目核心代码结构截图

    Dubbo实现RPC调用使用入门

       项目模块依赖Dubbo实现RPC调用使用入门

    特别提醒:开发人员在开发的时候可以将自己的业务REST服务化或者Dubbo服务化

    2.    项目依赖介绍

       2.1 后台管理系统、Rest服务系统、Scheculer定时调度系统依赖如下图:  

    Dubbo实现RPC调用使用入门

           2.2 Dubbo独立服务项目依赖如下图:

     Dubbo实现RPC调用使用入门

    3.  项目功能部分截图:

    Dubbo实现RPC调用使用入门

     

    Dubbo实现RPC调用使用入门

     

    Dubbo实现RPC调用使用入门

     

    Dubbo实现RPC调用使用入门

     

    Dubbo实现RPC调用使用入门

     

    Dubbo实现RPC调用使用入门

     

    Dubbo实现RPC调用使用入门  

    zookeeper、dubbo服务启动 

    Dubbo实现RPC调用使用入门

     

    Dubbo实现RPC调用使用入门  

    dubbo管控台 

    Dubbo实现RPC调用使用入门

     

    Dubbo实现RPC调用使用入门

     

    Dubbo实现RPC调用使用入门

     

    Dubbo实现RPC调用使用入门

     

    Dubbo实现RPC调用使用入门

     

    Dubbo实现RPC调用使用入门

     

    Dubbo实现RPC调用使用入门

     REST服务平台

    Dubbo实现RPC调用使用入门

     

    Dubbo实现RPC调用使用入门

     

    Dubbo实现RPC调用使用入门

     

    Dubbo实现RPC调用使用入门

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Easter79 Easter79
2年前
swap空间的增减方法
(1)增大swap空间去激活swap交换区:swapoff v /dev/vg00/lvswap扩展交换lv:lvextend L 10G /dev/vg00/lvswap重新生成swap交换区:mkswap /dev/vg00/lvswap激活新生成的交换区:swapon v /dev/vg00/lvswap
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
2年前
Dubbo实现RPC调用使用入门
使用Dubbo进行远程调用实现服务交互,它支持多种协议,如Hessian、HTTP、RMI、Memcached、Redis、Thrift等等。由于Dubbo将这些协议的实现进行了封装了,无论是服务端(开发服务)还是客户端(调用服务),都不需要关心协议的细节,只需要在配置中指定使用的协议即可,从而保证了服务提供方与服务消费方之间的透明。另外,如果我们使用
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这