温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

dubbo入门

发布时间:2020-04-06 18:43:17 来源:网络 阅读:400 作者:dreamyoungman 栏目:编程语言

dubbo 作为一项分布式服务调度框架,可以将系统的服务组件化,将服务单独抽取出来。提高系统的性能,当然,这个也仅限于分布式的服务当中。dubbo的架构图如下:
dubbo入门

dubbo的特性:
1 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。
2 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
3 基于注册中心目录服务,使服务消费方能动态的查×××提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

dubbo 可以做什么:
1 透明化的远程方法调用(就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。)
2 软负载均衡及容错机制(可在内网替代F5等硬件负载均衡器,降低成本,减少单点。)
3 服务自动注册与发现(不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。)

dubbo 应用场景
1.RPC分布式服务
当网站变大后,不可避免的需要拆分应用进行服务化,以提高开发效率,调优性能,节省关键竞争资源等。
比如:为了适用不断变化的市场需求,以及多个垂直应用之间数据交互方便,我们把公共的业务抽取出来作为独立的模块,为其他的应用提供服务,系统逐渐依赖于抽象和rpc远程服务调用。
2.配置管理
当服务越来越多时,服务的URL地址信息就会爆炸式增长,配置管理变得非常困难,F5硬件负载均衡器的单点压力也越来越大。
3.服务依赖
当进一步发展,服务间依赖关系变得错踪复杂,甚至分不清哪个应用要在哪个应用之前启动,架构师都不能完整的描述应用的架构关系。
4.服务扩容
接着,服务的调用量越来越大,服务的容量问题就暴露出来,这个服务需要多少机器支撑?什么时候该加机器?等等……

dubbo官方推荐利用zookeeper来当做服务注册中心,至于zookeeper的特性及应用场景在另外一篇文章中也有提到,这次利用zookeeper的windows版本进行dubbo的入门学习。zookeeper的windows版本安装比较简单,主要可以分为三步。
1、下载zookeeper安装包进行解压。
2、到解压目录的conf下面复制zoo_sample.cfg为zoo.cfg。修改zoo.cfg包括端口、数据路径(dataDir)、数据日志路径(dataLogDir)
3、运行bin下面的zkServer.cmd即可。

dubbo-helloworld 工程
缩写的dubbo-helloworld工程结构如下图:
dubbo入门

    在api工程里面定义接口
package org.hzg.dubbo.api.service;
/**
 * Created by hzg on 2019/3/13
 */
public interface DubboHelloworldApi {
    //接口
    public void helloWorldInterface();
}

在service工程里面实现接口

package org.hzg.dubbo.service.service.impl;
import org.hzg.dubbo.api.service.DubboHelloworldApi;
import org.springframework.stereotype.Service;
/**
 * Created by hzg on 2019/3/15
 */
@Service("helloWorldImpl")
public class DubboHelloWorldApiImpl implements DubboHelloworldApi {
    @Override
    public void helloWorldInterface() {
        System.out.println("调用成功。。。。。。。。。。。。。。。。。。。。。。。。。。。。");
    }
}

在service工程里面进行zookeeper相关配置

    <!-- 为当前服务提供者取个名字,并且提供给注册中心 -->
    <dubbo:application name="dubbo-helloworld-service"></dubbo:application>
    <!-- 注册中心的配置,使用zk暴露服务 -->
    <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"></dubbo:registry>
    <!-- 定义暴露服务的端口号 -->
    <dubbo:protocol name="dubbo" port="20880"></dubbo:protocol>
    <!-- 暴露具体的服务接口 -->
    <dubbo:service retries="3" interface="org.hzg.dubbo.api.service.DubboHelloworldApi"
        ref="helloWorldImpl"></dubbo:service>

在web工程里面进行zookeeper配置

<!-- 为当前服务提供者取个名字,并且提供给注册中心 -->
    <dubbo:application name="dubbo-helloworld-web"></dubbo:application>

    <!-- 注册中心的配置,用于消费者的监听 -->
    <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"></dubbo:registry>

    <!-- 监听服务,通过注册中心去进行查找,查找到后进行服务调用 -->
    <dubbo:reference id="dubboHelloworldApi" interface="org.hzg.dubbo.api.service.DubboHelloworldApi"
        retries="3" check="false" init="true"></dubbo:reference>

web工程里面的controller

package org.hzg.dubbo.web.controller;
import org.hzg.dubbo.web.service.HelloWorldService;
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;
/**
 * Created by hzg on 2019/3/15
 */
@Controller
public class HelloWorldController {
    @Autowired
    private HelloWorldService helloWorldService;
    @RequestMapping("/index")
    public String index() {
        return "index";
    }
    @RequestMapping("/hello")
    @ResponseBody
    public String sayHello() {
        return "hello";
    }
    @RequestMapping("/helloDubbo")
    @ResponseBody
    public String sayHelloDubbo() {
        helloWorldService.dubboHelloWorld();
        return "this is the first step";
    }
}

web工程里面的service

package org.hzg.dubbo.web.service;

import org.hzg.dubbo.api.service.DubboHelloworldApi;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
 * Created by hzg on 2019/3/15
 */
@Service
public class HelloWorldService {
    @Autowired
    private DubboHelloworldApi dubboHelloworldApi;   //这里就是api里面定义的接口
    public void dubboHelloWorld() {
        dubboHelloworldApi.helloWorldInterface();
    }
}

以上都是一些主要的配置,至于pom文件,tomcat,spring等配置,这里不再赘述,接下来,看效果:
1、启动zookeeper
dubbo入门

2、启动service服务(可以看到启动成功和一些注册成功的服务信息)
dubbo入门

3、启动消费者,即web工程
dubbo入门

访问:127.0.0.1:8080/helloDubbo
dubbo入门

可以看到服务提供方的日志打印
dubbo入门

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI