dubbo+zookeeper 与 springboot 简单整合 - Go语言中文社区

dubbo+zookeeper 与 springboot 简单整合


一、dubbo介绍

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

二、整合

1. 创建基本框架

<?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>org.example</groupId>
    <artifactId>dubboDemo</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <!--引入module-->
    <modules>
        <module>consumer</module>
        <module>provider</module>
    </modules>

    <parent>
        <!--spring boot 基础包-->
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.5.RELEASE</version>
        <relativePath/>
    </parent>

    <dependencies>
        <!--spring boot 依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.2.6.RELEASE</version>
        </dependency>

        <!--dubbo-springBoot依赖-->
        <dependency>
            <groupId>com.alibaba.spring.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>
        <!--zookeeper 依赖-->
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.10</version>
        </dependency>
    </dependencies>
</project>

2. 生产者 provider

  • 引入依赖
<?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">
    <parent>
        <artifactId>dubboDemo</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <packaging>jar</packaging>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>provider</artifactId>

</project>
  • application.yml
server:
  port: 8087

spring:
  dubbo:
    application:
      # 应用名称
      name: provider
    registry:
      # 注册中心地址
      address: zookeeper://127.0.0.1:2181
    scan:
      # 服务类包目录
      base-packages: org.example.provider.demo.service
    protocol:
      # 协议名称
      name: dubbo
      # 协议端口
      port: 20880

  • 创建接口
package org.example.provider.demo.service;

public interface DemoService {

    String sayHello(String name);

}
  • 实现类
package org.example.provider.demo.service;


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


@Component
@Service
public class DemoServiceImpl implements DemoService {
    @Override
    public String sayHello(String name) {
        return "Hello" + name;
    }
}

  • 启动类
package org.example.provider.demo;

import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;


@SpringBootApplication
@EnableDubboConfiguration
public class DubboApplication {

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

  • 目录结构如下

3. 消费者 consumer

  • 引入依赖 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">
    <parent>
        <artifactId>dubboDemo</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <modelVersion>4.0.0</modelVersion>
    <artifactId>consumer</artifactId>

     <dependencies>
        <dependency>
            <groupId>org.example</groupId>
            <artifactId>provider</artifactId>
            <version>1.0-SNAPSHOT</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>

</project>
  • application.yml
server:
  port: 8088

spring:
  dubbo:
    application:
      name: cutomer
    registry:
      address: zookeeper://127.0.0.1:2181
  • controller类
package com.example.consumer.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import org.example.provider.demo.service.DemoService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


@RestController
public class DemoController {

    @Reference
    private DemoService demoService;


    @RequestMapping("/sayHello")
    public String sayHello(){
        return demoService.sayHello("211");
    }

}
  • 主启动类
package com.example.consumer;

import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;


@SpringBootApplication
@EnableDubboConfiguration
public class StartApplication {

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

  • 目录结构如下

4. 先启动生产者 provider 的主启动类,再启动 consumer 的主启动类, 然后请求 localhost:8088/sayHello,如果返回正常,那就意味着成功了。

5. 整合过程中的注意点

  • 需要先安装启动zookeeper,并开放端口
  • 如果启动报错多半是生产者没有注册成功,可以安装启动 dubbo-admin 来查看生产者是否提供服务。
  • 阿里云服务器上,如果生产者和消费者不在同一个局域网里的话,是有可能无法直接访问的,因为在dubbo服务里的ip是内网ip,而不是外网ip。可能是需要修改映射ip之类的,具体还没尝试。https://blog.csdn.net/xlgen157387/article/details/52702659/
  • 服务器上的消费者想要访问生产者的话,需要把生产者的代码打包成jar包,放入本地maven仓库里。

参考链接:https://www.cnblogs.com/cxyyh/p/10633291.html

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/socct_yj/article/details/105516482
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢