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

大家都在看

  • 《Redis开发与运维》——(九)哨兵(脑图)

    posted @2021-01-09 15:09 雪山上的蒲公英 阅读(181 ) 评论() 编辑 / 返回顶部代码 / Original: https://www.cnblogs…

    Linux 2023年5月28日
    0106
  • shell的入门

    命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。 中间不能有空格,可以使用下划线 不能使用标点符号 不能使用bash里面关键字 使用变量加上$就可使用 只读变量 rea…

    Linux 2023年6月8日
    087
  • 022.常见硬盘检测方式

    硬盘监测概述 硬盘异常损坏日常相对概率较高,同时不同的文件系统(xfs,reiserfs,ext3)其检测方式不同。建议使用dmesag查看有没有硬件I/O故障的日志,也可使用用f…

    Linux 2023年6月7日
    090
  • 使用二手 gopro 做行车记录仪

    背景 自打开了博客以后,一直在写技术说明文,今天打算写点程序以外的东西换换味口。前段时间在某鱼上以 300 元的价格入手了一套完整的 gopro3+ 运动摄像头,带一张 32G S…

    Linux 2023年6月6日
    0257
  • 操作系统实现-简单热身

    博客网址:www.shicoder.top微信:18223081347欢迎加群聊天 :452380935 这次对上次的boot.asm进行代码讲解,也可以对汇编的相关理论进行补充 …

    Linux 2023年6月13日
    091
  • 设计模式在业务系统中的应用

    本文的重点在于说明工作中所使用的设计模式,为了能够更好的理解设计模式,首先简单介绍一下业务场景。使用设计模式,可以简化代码、提高扩展性、可维护性和复用性。有哪些设计模式,这里就不再…

    Linux 2023年6月8日
    0104
  • Spring Boot:使用Redis存储技术

    综合概述 Redis是一个开源免费的高性能key-value数据库,读取速度达110000次/s,写入速度达81000次/s。Redis支持丰富的数据类型,如Lists, Hash…

    Linux 2023年5月28日
    0107
  • Servlet版本冲突导致页面404

    先准备好了Tomcat环境以及用Idea打了一个Servlet war包想看看效果,结果发现页面跳转一直报404错误,检查了跳转url,项目结构等情况后,问题依旧没有解决。最后偶然…

    Linux 2023年6月7日
    091
  • [云计算]TCP云架构-思维导图

    博客园 :当前访问的博文已被密码保护 请输入阅读密码: Original: https://www.cnblogs.com/Skybiubiu/p/16276893.htmlAut…

    Linux 2023年6月13日
    083
  • 统计算法_探索性统计

    最近不知道写什么了,基本python的各种功能百度一下,都能搜到一大把,最近itchat好像很火,不过对这个不是很感冒,等以后有兴趣或者用的上的时候研究研究准备把统计方面的东西再看…

    Linux 2023年6月6日
    088
  • 【Linux】socket通信编程

    socket通信 * – socket简介 – socket操作API函数 – 代码实现 socket简介 网络层的”ip地址&#8…

    Linux 2023年6月13日
    092
  • 如何在shell脚本中传变量的值传给curl

    随着即时通讯的发展,大量的报警媒介已经从以往的邮件转为钉钉,企业微信等聊天工具。当我使用shell脚本来监控 Keepalived的时候,在给curl传递变量的时候无法生效,经过查…

    Linux 2023年6月8日
    095
  • tiddlywiki-nodejs 安装部署

    安装 tiddlywiki (root) &#x786E;&#x8BA4; npm &#x5305;&#x5168;&#x5C40;&amp…

    Linux 2023年6月14日
    089
  • 网络中冗余备份

    冗余备份的重要性 如今社会,网络是各个产业的新的血脉,网络的稳定性至关重要,一旦网络出现故障,导致断网、延迟丢包等很可能会导致生产作业停滞,造成较经济损失,为此冗余备份至关重要,从…

    Linux 2023年6月6日
    0121
  • 不同云服务器下,ubuntu下开k3s集群

    首先先感谢老哥的文章:h构建多云环境下的K3S集群,但是我尝试在centos 8.2上面前面一直执行报错并且安装glibc 2.17时还会报错make版本太低,所以直接放弃cent…

    Linux 2023年6月7日
    091
  • flask 之上传本地图片

    项目配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 import os class Config(object): DEBUG = True SQLALCH…

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