springboot集成dubbo的配置(dubbo项目如何部署)

1.Dubbo框架Dubbo框架是一个高性能、重量轻、基于java的RPC框架。Dubbo提供了三个关键功能,包括基于接口的远程调用、容错和负载平衡,以及自动服务注册和发现。Dubbo可以和Spring框架无缝集成。官方的Dubbo框架如下图所示:其核心部分包含:1.远程通讯:提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。2.集群容错:提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡…

大家好,又见面了,我是你们的朋友全栈君。

1. Dubbo框架

         Dubbo框架是一个高性能、重量轻、基于java的RPC框架。Dubbo提供了三个关键功能,包括基于接口的远程调用、容错和负载平衡,以及自动服务注册和发现。Dubbo可以和Spring框架无缝集成。官方的Dubbo框架如下图所示:

springboot集成dubbo的配置(dubbo项目如何部署)

        其核心部分包含:

1. 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。

2. 集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。

3. 自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

        Dubbo能做什么?

1.透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。      

2.软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。

3. 服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。

        Dubbo的存在简单来说就是要减小service层的压力。由于Dubbo使用zookeeper作为服务注册中心,所以先需要在自己本地安装好zookeeper的环境,具体安装方式参考zookeepr的官方文档:https://zookeeper.apache.org/。安装完毕后,启动zookeepr服务。zoo.cfg的配置文件如下:

tickTime=2000
initLimit=10
syncLimit=5
dataDir=D:\server\apache-zookeeper-3.6.1\data 
clientPort=2181

2.搭建SpringBoot和Dubbo项目

首先基于maven工具创建一个空的项目,pom.xml依赖文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.chenpeng</groupId>
    <artifactId>dubbo</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>dubbo-demo-api</module>
        <module>dubbo-demo-provider</module>
        <module>dubbo-demo-customer</module>
    </modules>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.3.RELEASE</version>
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <zookeeper.version>3.4.13</zookeeper.version>
        <dubbo.starter.version>0.2.0</dubbo.starter.version>
    </properties>


    <dependencies>

        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>${dubbo.starter.version}</version>
        </dependency>


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>${zookeeper.version}</version>
        </dependency>


    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>

接着在根项目录下创建三个子maven项目模块:

  • dubbo-demo-api
  • dubbo-demo-customer
  • dubbo-demo-provider

springboot集成dubbo的配置(dubbo项目如何部署)

 在dubbo-demo-api 项目中创建测试的接口,添加sayHello方法,创建的DemoService.java文件具体内容如下:

package com.chenpeng.dubbo;

/**
 * @Author: chenpeng
 * @Datetime: 2020/7/12 15:33
 * @Version: V1.0
 */
public interface DemoService {
    String sayHello(String name);
}

 dubbo-demo-provider(提供者)项目中实现DemoService接口,创建DemoServiceImpl.java的文件内容如下:

package com.chenpeng.dubbo.provider;

import com.alibaba.dubbo.config.annotation.Service;
import com.chenpeng.dubbo.DemoService;
import org.springframework.stereotype.Component;

/**
 * @Author: chenpeng
 * @Datetime: 2020/7/12 16:24
 * @Version: V1.0
 */
@Service
@Component
public class DemoServiceImpl implements DemoService {
    public String sayHello(String name) {
        return "Hello " + name;
    }
}

在 dubbo-demo-customer(消费者)项目中调用DemoService中的sayHello接口方法,创建Controller,HelloController.java:

package com.chenpeng.dubbo.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import com.chenpeng.dubbo.DemoService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Author: chenpeng
 * @Datetime: 2020/7/12 16:58
 * @Version: V1.0
 */
@RestController
public class HelloController {

    @Reference
    private DemoService demoService;


    @RequestMapping(value = "/hello")
    public String hello() {
        String hello = demoService.sayHello("xiaopeng");
        System.out.println(demoService.sayHello("JUST"));
        return hello;
    }
}

在 dubbo-demo-provide 中添加项目的启动类DemoApplication.java如下:

package com.chenpeng.dubbo;

import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * 服务提供者
 *
 * @Author: chenpeng
 * @Datetime: 2020/7/12 16:40
 * @Version: V1.0
 */
@EnableDubbo
@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

其次添加Dubbo服务注册的配置,resource/application.yml文件内容如下:

server:
  port: 9011


spring:
  application:
    name: spring-boot-dubbo-provider

dubbo:
  application:
    name: spring-boot-dubbo-provider
  protocol:
    name: dubbo
    port: 20880
  registry:
    address: zookeeper://127.0.0.1:2181


 同理,在 服务消费者dubbo-demo-customer 项目中添加服务的注册配置resource/application.yml:,以及消费者启动类CustomerApplication:

CustomerApplication.java文件具体内容如下:

package com.chenpeng.dubbo;

import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * 消费者
 *
 * @Author: chenpeng
 * @Datetime: 2020/7/12 17:00
 * @Version: V1.0
 */
@EnableDubbo
@SpringBootApplication
public class CustomerApplication {

    public static void main(String[] args) {
        SpringApplication.run(CustomerApplication.class, args);
    }
}

resource/application.yml配置:

server:
  port: 9021


spring:
  application:
    name: springboot-dubbo-consumer

dubbo:
  application:
    name: springboot-dubbo-consumer
  registry:
    address: zookeeper://127.0.0.1:2181
  consumer:
    timeout: 5000

在 dubbo-demo-customer服务消费者项目中创建controller接口实现对外功能的暴露,HelloController.java:

package com.chenpeng.dubbo.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import com.chenpeng.dubbo.DemoService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Author: chenpeng
 * @Datetime: 2020/7/12 16:58
 * @Version: V1.0
 */
@RestController
public class HelloController {

    @Reference
    private DemoService demoService;


    @RequestMapping(value = "/hello")
    public String hello() {
        String hello = demoService.sayHello("xiaopeng");
        System.out.println(demoService.sayHello("JUST"));
        return hello;
    }
}

整体的项目文件结构的截图如下:

springboot集成dubbo的配置(dubbo项目如何部署)

最后一步,就是分别启动服务提供者和服务消费者两个项目(注意启动顺序),然后浏览器访问http://localhost:9021/hello

springboot集成dubbo的配置(dubbo项目如何部署)

3.使用dubbo-admin框架

        Dubbo-2.6.1之后的版本中不在集成dubbo-admin,需要单独的安装下载配置,本实验中采用了从github上下载源代码,然后通过maven打包安装成jar包,最终通过直接运行jar包来启动dubbo-admin端。与上一节的步骤的前提条件一样,需要本地配置安装好zookeepr服务。

 

dubbo-admin的安装部署具体如下:

1. 下载源代码 git clone https://github.com/apache/dubbo-admin.git

2. 然后配置zookeeper服务的地址(如果需要修改) dubbo-admin-server/src/main/resources/application.properties

3. 接着运行 mvn install -D maven.test.skip=true 进行安装,在目录 dubbo-admin-server/target 中会生成jar包。

springboot集成dubbo的配置(dubbo项目如何部署)

springboot集成dubbo的配置(dubbo项目如何部署)

 

4. cmd命令到该目录下,运行 java -jar xxxx.jar –server.port=9999 , 后面所携带的参数是为了修改默认的端口,防止默认的8080端口被占用。

5. 访问:http://localhost:9999/,页面最终的效果如下:

springboot集成dubbo的配置(dubbo项目如何部署)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/128156.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • hibernate与mybatis的区别优缺点对比

    hibernate与mybatis的区别优缺点对比现在对hibernate和mybatis做一下对比,便于大家更好的理解和学习,使自己在做项目中更加得心应手。第一方面:开发速度的对比就开发速度而言,Hibernate的真正掌握要比Mybatis来得难些。Mybatis框架相对简单很容易上手,但也相对简陋些。个人觉得要用好Mybatis还是首先要先理解好Hibernate。比起两者的开发速度,不仅仅要考虑到两者的特性及性能,更要根据项目需求去考虑究竟哪一个更适合项目开发,比如:一个项目中用到的复杂查询基本没有,就是简单的增删改查,这样选择hiberna

  • PAT乙级题库

    PAT乙级题库1001害死人不偿命的(3n+1)猜想(15分)1002写出这个数(20分)1004成绩排名(20分)1006换个格式输出整数(15分)1007素数对猜想(20分)1008数组元素循环右移问题(20分)1011A+B和C(15分)1012数字分类(20分)1013数素数(20分)1016部分A+B(1…

  • 视频服务器搭建流媒体_个人服务器搭建

    视频服务器搭建流媒体_个人服务器搭建
    什么样的情况下才使用FMS?有以下几种情形的时候,你可能需要用到FMS
    1、需要通过FlashPlayer播放视频,而视频是以流的方式,而不是http渐进式下载的方式进行播放的时候。渐进式下载就是仍然走http协议,youtube,土豆等站点就是。那么什么时候才真正需要用到流视频呢?
    1)视频文件超过100MB或超过10分钟,用户有seek需求的时候
    2)视频文件不需要被下载的时候,rtmp如果不行,可以试试rtmpe
    3)视频流需要多

    2022年10月20日
  • db2top命令详解「建议收藏」

    db2top命令详解「建议收藏」目录1.db2top命令语法2.db2top运行模式2.1交互模式2.2批量模式3.db2top监控模式3.1数据库监控(d)3.2表空间监控(t)3.3动态SQL监控(D)3.4会话监控(l)3.5缓存池监控(b)3.6锁监控(U)3.7表监控(T)3.8瓶颈监控(B)4.其他1.db2top命令语法可使用命令行db2top–h查看,这里就不做赘述了。2.db2top运行模式db2t…

  • RuntimeException和Exception区别

    RuntimeException和Exception区别1.java将所有的错误封装为一个对象,其根本父类为Throwable,Throwable有两个子类:Error和Exception。2.Error是Throwable的子类,用于指示合理的应用程序不应该试图捕获的严重问题。大多数这样的错误都是异常条件。虽然ThreadDeath错误是一个“正规”的条件,但它也是Error的子类,因为大多数应用程序都不应该试图捕获它。在执行该方…

  • 用Laravel Sms实现 laravel短信验证码的发送

    用Laravel Sms实现 laravel短信验证码的发送

    2021年10月25日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号