二、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)

大家都在看

  • 高速USB转4串口产品设计-RS485串口

    基于480Mbps 高速USB转8路串口芯片CH344Q,可以为各类主机扩展出4个独立的串口。CH344芯片支持使用操作系统内置的CDC串口驱动,也支持使用厂商提供的VCP串口驱动…

    Linux 2023年6月7日
    0108
  • redis 常用命令

    批量删除redis key redis-cli -a xxx keys “prefix_tb_supplier:spl_id*” | xargs redis…

    Linux 2023年5月28日
    088
  • 国产化之Arm64 CPU+银河麒麟系统安装.NetCore

    背景 某个项目需要实现基础软件全部国产化,其中操作系统指定银河麒麟,银河麒麟就是一个Linux发行版,数据库使用达梦V8,这个数据库很多概念和Oracle相似,CPU平台的范围:龙…

    Linux 2023年5月27日
    082
  • linux编译安装nginx

    本文升级过程,适用于大部分nginx编译版本 常用编译选项说明nginx大部分常用模块,编译时./configure –help以–without开头的都默认安装。 –prefix…

    Linux 2023年5月27日
    083
  • 嵌入式软件开发中必备软件工具

    1、前言 作为一个软件开发人员,除了程序能力素养方面外,还应该熟练地使用各种常用的辅助工具,所谓”工欲善其事,必先利其器”;通过这些工具能提升自己的专业素养…

    Linux 2023年6月7日
    0107
  • 关于程序员成长的一些思考

    任何一名技术大神都是从小菜鸟开始的,这应该无一例外。当然,有的人成长的快,有的人成长得慢,有的人坚持下来,有的人半途而废。如果我们在成长的过程中能掌握一些方法,也许能少走一些弯路。…

    Linux 2023年6月6日
    097
  • Centos 7 上安装 jdk 及问题小记

    yum 下载安装 使用 yum -y list jav 或者 yum search jdk 查找 java 相关安装包的列表 yum -y list &#x641C;&am…

    Linux 2023年5月27日
    0108
  • Lvs

    Lvs Lvs Lvs简介 体系结构 LVS管理工具 配置 lvs-nat 模式的 httpd 负载集群—http 配置lvs-nat模式的httpd负载集群&#821…

    Linux 2023年6月6日
    0120
  • OrchardCore Headless建站

    说到CMS系统,可能大家都能想起 WordPress和 Drupal之类的框架,作为.NET爱好者,一般也是知道一些基于.NET的CMS框架的,典型的比如 DNN、 Umbraco…

    Linux 2023年6月6日
    0102
  • jenkins 设置钉钉机器人+jenkins调用shell脚本使用钉钉机器人自定义发消息并通知指定人

    两种钉钉通知方式,一种是使用安装的钉钉插件来通知,但是这个不好定义通知内容,没办法控制发送条件,只要配置了,不管构建参数(分支,渠道,配置),都会发通知,第二种是使用脚本的方式来通…

    Linux 2023年5月28日
    089
  • Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数

    Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数 测试脚本 $ 和 $@* 的区别 $ 和 $@ 都表示传递给函数或脚本的所有参数,不被双引…

    Linux 2023年5月28日
    088
  • 面试连环炮系列(二十六):什么情况下JVM频繁发生full GC

    什么情况下JVM频繁发生full GC; 在实际项目什么代码导致full GC;线上怎么排查是哪个程序导致的ful GC 1. 什么情况下JVM频繁发生full GC?full g…

    Linux 2023年6月6日
    0121
  • SpringBoot学习笔记——Redis Template

    Springboot可以通过redis template和redis进行交互,使用方法如下 可以参考这个系列的文章: 【快学springboot】11.整合redis实现sessi…

    Linux 2023年5月28日
    0102
  • 我可以不在校园

    我在校园自动打卡,仅作学习使用。 我在校园自动打卡,仅作学习使用 直达电梯:我可以不在校园 posted @2021-11-19 17:38 DominicKK 阅读(258 ) …

    Linux 2023年6月8日
    0113
  • STP 指定端口 根端口 区别和理解

    不多说,先上图,A为指定端口,B为非指定端口。 看本文的网友应该知道根端口和指定端口的选举,但是对指定端口和根端口的理解不清楚。这里我就略过选举过程,直接描述这两者的区别和存在的意…

    Linux 2023年6月6日
    0141
  • jdk8 时间

    package p2022; import java.text.SimpleDateFormat; import java.util.Date; /** * @descriptio…

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