• SpringBoot分布式篇Ⅶ --- 整合Dubbo


    在分布式系统中, 国内常用zookeeper+dubbo组合,而Spring Boot推荐使用全栈的Spring,Spring Boot,Spring Cloud。 

    分布式系统:

    一.Zookeeper和Dubbo概览

    1.1 ZooKeeper

    ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

    1.2 Dubbo

    Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色。

    Dubbo体系结构:

    二.Zookeeper的安装与启动

    在linux虚拟机上用docker安装zookeeper:

    docker pull registry.docker-cn.com/library/zookeeper

    docker启动zookeeper并进行端口映射:

    docker run --name some-zookeeper -p 2181:2181 --restart always -d zookeeper

    .整合Dubbo

    创建两个项目,一个项目作为服务提供者,一个项目作为服务消费者。

    3.1 服务提供者注册到注册中心

    3.1.1 引入dubbo和zkclient的相关依赖: <!--1.引入dubbo-spring-boot-starter-->

            <dependency>
                <groupId>com.alibaba.boot</groupId>
                <artifactId>dubbo-spring-boot-starter</artifactId>
                <version>0.1.0</version>
            </dependency>
            <!--2.引入zookeeper的客户端工具-->
            <dependency>
                <groupId>com.github.sgroschupf</groupId>
                <artifactId>zkclient</artifactId>
                <version>0.1</version>
            </dependency>

    3.1.2 配置dubbo的扫描包和注册中心地址:

    dubbo.application.name=provider-ticket
    dubbo.registry.address=zookeeper://***.**.**.**:2181
    dubbo.scan.base-packages=com.wang.ticket.service

    3.1.3 开启dubbo的注解:

    @EnableDubbo  //开启dubbo注解
    @SpringBootApplication
    public class ProviderTicketApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(ProviderTicketApplication.class, args);
        }
    }

    3.1.4 使用@Service(com.alibaba.dubbo.config.annotation.Service)发布服务:

    先编写Service接口: 

    package com.wang.ticket.service;
    public interface TicketService {
        String getTicket();
    }

    实现接口:

    @Component
    @Service //注意这边是com.alibaba.dubbo.config.annotation.Service
    //主要作用是将服务发布出去
    public class TicketServiceImpl implements TicketService {
        @Override
        public String getTicket() {
            return "《毒液:致命守护者》";
        }
    }

    完成上诉步骤后启动该服务项目,保持运行状态,以便消费者使用。

    3.2 服务消费者消费服务

    3.2.1 在消费者项目的pom文件中引入dubbo和zkclient

     <!--1.引入dubbo-spring-boot-starter-->
            <dependency>
                <groupId>com.alibaba.boot</groupId>
                <artifactId>dubbo-spring-boot-starter</artifactId>
                <version>0.1.0</version>
            </dependency>
            <!--2.引入zookeeper的客户端工具-->
            <dependency>
                <groupId>com.github.sgroschupf</groupId>
                <artifactId>zkclient</artifactId>
                <version>0.1</version>
            </dependency>

    3.2.2 创建服务发布的service接口,要求全类名与发布的完全相同

    package com.wang.ticket.service;
    public interface TicketService {
        String getTicket();
    }

    3.2.3 配置注册中心地址

    dubbo.application.name=consumer-user
    dubbo.registry.address=zookeeper://172.16.80.34:2181

    3.2.4 消费注册中心服务

    @Service //org.springframework.stereotype.Service
    public class UserService {
        @Reference //引入注册中心的服务,按照全类名匹配,在注册中心找到对应的服务
        TicketService ticketService;
        public void  hello(){
            String ticket = ticketService.getTicket();
            System.out.println(ticket);
        }
    }

     3.2.5 测试

    测试只需要注入UserService,并调用该方法,若能成功调用说明dubbo服务以及调用成功了

  • 相关阅读:
    查看JAVA的class二进制文件的方法
    常见算法整理(二)
    常见算法整理(一)
    JAVA的Spring注入机制事例详解
    Spring的PropertyPlaceholderConfigurer事例应用
    eclipse 使用总结
    Mysql的union
    filter中的DelegatingFilterProxy使用事例
    Spring组件扫描<context:component-scan/>详解
    JAVA 注解的几大作用及使用方法详解
  • 原文地址:https://www.cnblogs.com/wangxiayun/p/10314121.html
Copyright © 2020-2023  润新知