二、Java分布式(第二章)—-Demo

这一章简单搭建一个分布式服务:

1、Dubbo简介:Dubbo 是一个分布式服务框架,是阿里巴巴开源项目。

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

dubbo流程图如下:

二、Java分布式(第二章)----Demo

节点角色说明:

  • Provider: 暴露服务的服务提供方。
  • Consumer: 调用远程服务的服务消费方。
  • Registry: 服务注册与发现的注册中心。
  • Monitor: 统计服务的调用次调和调用时间的监控中心。
  • Container: 服务运行容器。

调用关系说明:

  • 服务容器负责启动,加载,运行服务提供者。
  • 服务提供者在启动时,向注册中心注册自己提供的服务。
  • 服务消费者在启动时,向注册中心订阅自己所需的服务。
  • 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
  • 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
  • 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

2、Zookeeper注册中心:

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

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

3、入门案例:
1、整个项目架构

二、Java分布式(第二章)----Demo
2、Provider:
二、Java分布式(第二章)----Demo
pom.xml:
 <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.6.4</version>
        </dependency>
        <dependency>
            <groupid>org.apache.zookeeper</groupid>
            <artifactid>zookeeper</artifactid>
            <version>3.4.6</version>
        </dependency>
        <dependency>
            <groupid>org.apache.curator</groupid>
            <artifactid>curator-recipes</artifactid>
            <version>4.0.1</version>
        </dependency>
        <dependency>
            <groupid>log4j</groupid>
            <artifactid>log4j</artifactid>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupid>io.netty</groupid>
            <artifactid>netty-all</artifactid>
            <version>4.1.32.Final</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.8
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
                <groupid>org.apache.tomcat.maven</groupid>
                <artifactid>tomcat7-maven-plugin</artifactid>
                <version>2.2</version>
                <configuration>
                    <!-- 指定端口 -->
                    <port>8083</port>
                    <!-- 请求路径 -->
                    <path>/</path>
                </configuration>
            </plugin>
        </plugins>
    </build>

applicationContext-server.xml


web.xml


        contextConfigLocation
        classpath:applicationContext*.xml

        org.springframework.web.context.ContextLoaderListener

UserService.java

public interface UserService {
    String getName();
}

UserServiceImpl。java

import com.alibaba.dubbo.config.annotation.Service;
import com.test.service.UserService;

@Service
public class UserServiceImpl implements UserService {
    @Override
    public String getName() {
        return "hello world";
    }
}

注:@Service导包为: import com.alibaba.dubbo.config.annotation.Service 千万不要导错包了

3、Consumer:

二、Java分布式(第二章)----Demo

pom.xml


            org.springframework
            spring-context
            ${spring.version}

            org.springframework
            spring-beans
            ${spring.version}

            org.springframework
            spring-webmvc
            ${spring.version}

            org.springframework
            spring-jdbc
            ${spring.version}

            org.springframework
            spring-aspects
            ${spring.version}

            org.springframework
            spring-jms
            ${spring.version}

            org.springframework
            spring-context-support
            ${spring.version}

            com.alibaba
            dubbo
            2.6.4

            org.apache.zookeeper
            zookeeper
            3.4.10

            org.apache.curator
            curator-recipes
            4.0.1

            log4j
            log4j
            1.2.17

            io.netty
            netty-all
            4.1.32.Final

                org.apache.maven.plugins
                maven-compiler-plugin
                2.3.2

                    1.8
                    1.8

                org.apache.tomcat.maven
                tomcat7-maven-plugin

                    8082

                    /

SpringMVC.xml


web.xml


        contextConfigLocation
        classpath:SpringMVC.xml

        org.springframework.web.context.ContextLoaderListener

        springmvc
        org.springframework.web.servlet.DispatcherServlet

            contextConfigLocation
            classpath:SpringMVC.xml

        springmvc
        *.do

UserService.java

public interface UserService {
    String getName();
}

UserController.java

import com.alibaba.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.test.service.UserService;

@Controller
@RequestMapping("/user")
public class UserController {
    /**
     * TODO 注意:@Reference 包信息是 com.alibaba.dubbo.config.annotation.Reference;
     */
    @Reference
    private UserService userService;

    @RequestMapping("showName")
    @ResponseBody
    public String showName(){
        return userService.getName();
    }

}

注:@Reference 包信息是 com.alibaba.dubbo.config.annotation.Reference 千万不要导错包了

4、访问:http://localhost:8082/user/showName.do
8082:consumer配置的tomcat的端口号

5、demo已上传至:https://github.com/Hao-000/DubboDemo1

Original: https://www.cnblogs.com/zdh052286/p/11962888.html
Author: 清酒一杯
Title: 二、Java分布式(第二章)—-Demo

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/581611/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • MIT6.828——Lab1 partB(麻省理工操作系统课程实验)

    Lab1 历时2天,完成了LAB1,完整代码仓库可点击:https://github.com/Elio-yang/MIT6.828 partA 练习 *exercise3 gdb指…

    Linux 2023年5月27日
    0110
  • Linux系统编程 —线程同步概念

    同步概念 同步,指对在一个系统中所发生的事件之间进行协调,在时间上出现一致性与统一化的现象。 但是,对于不同行业,对于同步的理解略有不同。比如:设备同步,是指在两个设备之间规定一个…

    Linux 2023年6月14日
    080
  • 我为儿子开发的第一款Android App,用于九九乘法练习

    用一天时间在macbook上安装好了Android Studio For Mac,注意dl.google.com只支持电信网络下载,家里宽带如果是移动或者联通的,使用AS下载And…

    Linux 2023年6月14日
    082
  • 玩转redis-简单消息队列

    使用 go语言基于 redis写了一个简单的消息队列源码地址使用demo redis的 list 非常的灵活,可以从左边或者右边添加元素,当然也以从任意一头读取数据 添加数据和获取…

    Linux 2023年5月28日
    089
  • 数据库配置和前端项目创建

    1、封装Response utils.py/exception from rest_framework.response import Response class APIResp…

    Linux 2023年6月14日
    085
  • mycat数据库集群系列之mysql主从同步设置

    最近在梳理数据库集群的相关操作,现在花点时间整理一下关于mysql数据库集群的操作总结,恰好你又在看这一块,供一份参考。本次系列终结大概包括以下内容:多数据库安装、mycat部署安…

    Linux 2023年6月14日
    087
  • Linux系统编程之命名管道与共享内存

    在上一篇博客中,我们已经熟悉并使用了匿名管道,这篇博客我们将讲述进程间通信另外两种常见方式——命名管道与共享内存。 1.命名管道 管道是使用文件的方式,进行进程之间的通信。因此对于…

    Linux 2023年6月8日
    077
  • 音视频技术入门课- 05 使用FFmpeg与OBS进行直播推流

    做直播推流的前提是要有直播服务器接收直播流,所以需要我们自己建设一个流媒体服务器。 流媒体服务器SRS SRS是一个简单高效的实时视频服务器,支持RTMP/WebRTC/HLS/H…

    Linux 2023年6月7日
    093
  • 【C++基础】函数的分文件编写

    cpp函数的分文件编写 作用:让代码结构更加清晰 如下步骤: 创建后缀名为.h的头文件 创建后缀名为.cpp的源文件 在头文件中写函数的声明 在源文件中写函数的定义,同时引入自定义…

    Linux 2023年6月13日
    089
  • RPA人力资源简历筛选机器人

    简历自动筛选及分析机器人,支持前程无忧、猎聘 1、自动登录招聘网站 2、自动填充简历筛选条件 3、RPA依次读取所筛选的简历信息 4、自动将简历数据复制到本地文档中 5、完成简历信…

    Linux 2023年6月7日
    093
  • Java实现两种队列(数组和链表)

    @date 2022-09-13 17:50*/public class QueueLinked{ private static class Node{E item;Node ne…

    Linux 2023年6月14日
    0119
  • rpm 打patch

    1、把patch文件放入SOURCES中 2、修改SPECS中的XXX.spec,把下图中箭头的部分都要写上,这里是一个坑 3、最后安装rmp包的时候如果有问题加上–f…

    Linux 2023年6月13日
    097
  • DOS-批处理隐藏自身窗口

    批处理隐藏运行效果代码,防止出现黑窗口不建议非法用途,可以用来执行命令,提供用户体验。 运行bat时隐藏cmd窗口的方法 运行bat时隐藏cmd窗口的方法 可以编辑一个vbs脚本,…

    Linux 2023年6月8日
    093
  • WSL系统安装与使用

    WSL是适用于 Linux 的 Windows 子系统,可让开发人员按原样运行 GNU/Linux 环境 – 包括大多数命令行工具、实用工具和应用程序 – …

    Linux 2023年5月27日
    0122
  • Python Django构建简易CMDB

    前言 本文仅是对以前写的小示例进行一次梳理和代码优化,由于本人菜鸟一枚,前端,系统运维知识只知皮毛,后端python也没有实际开发经验,在开发过程中也没有考虑堡垒机等一系列服务器的…

    Linux 2023年6月7日
    0117
  • GCC常见命令

    rwx 对于目录和文件的区别 文件 目录 r 文件的内容可以被查看。支持cat、more、head…vim 目录的内容可以被查看。ls、tree w 文件的内容可以被添…

    Linux 2023年6月6日
    0108
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球