zoukankan      html  css  js  c++  java
  • SpringCloudAlibaba+Dubbo

    本文主要用来实现SpringCloud如何利用Dubbo(RPC框架)的高性能服务调用。

    Dubbo的注册中心采用的是Zookeeper,而起初微服务的注册中心并不支持Zookeeper,那么怎么才能让SpringCloud支持Dubbo呢?

    SpringCloudAlibaba出现了,它使用Nacos作为注册中心,具体使用参照:SpringBoot整合Nacos

    下面说一下Nacos+Dubbo的实现(文末有项目Gitee地址)

    首先启动nacos,具体参照:Windows安装Nacos单机&集群

    创建maven父工程

    nacos-dubbo-demo,pom文件如下:

    <?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.qjc.demo</groupId>
        <artifactId>nacos-dubbo-demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>nacos-dubbo-demo</name>
        <description>Demo project for Spring Boot</description>
        <packaging>pom</packaging>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.2.5.RELEASE</version>
        </parent>
    
        <modules>
            <module>nacos-dubbo-provider</module>
            <module>nacos-dubbo-api</module>
            <module>nacos-dubbo-consumer</module>
        </modules>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <maven.compiler.source>1.8</maven.compiler.source>
            <maven.compiler.target>1.8</maven.compiler.target>
            <java.version>1.8</java.version>
    
            <spring-boot.version>2.2.5.RELEASE</spring-boot.version>
            <spring-cloud-alibaba.version>2.2.1.RELEASE</spring-cloud-alibaba.version>
        </properties>
    
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>com.alibaba.cloud</groupId>
                    <artifactId>spring-cloud-starter-dubbo</artifactId>
                    <version>${spring-cloud-alibaba.version}</version>
                </dependency>
                <dependency>
                    <groupId>com.alibaba.cloud</groupId>
                    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
                    <version>${spring-cloud-alibaba.version}</version>
                </dependency>
                <dependency>
                    <groupId>com.alibaba.cloud</groupId>
                    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
                    <version>${spring-cloud-alibaba.version}</version>
                </dependency>
            </dependencies>
        </dependencyManagement>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>

    创建api接口管理工程

    nacos-dubbo-api,不需要导入依赖,创建接口

    package com.qjc.demo.service;
    
    import java.util.List;
    import java.util.Map;
    
    public interface HelloProvider {
    
        String hello(String name);
    
        List<Map<String, String>> testMapList(Map<String, String> map);
    
    }

    创建服务提供者

    nacos-dubbo-provider,导入依赖

    <dependencies>
            <dependency>
                <groupId>com.qjc.demo</groupId>
                <artifactId>nacos-dubbo-api</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
    
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-dubbo</artifactId>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>
        </dependencies>

    创建配置文件bootstrap.yml

    spring:
      application:
        name: nacos-dubbo-provider
      main:
        allow-bean-definition-overriding: true
      cloud:
        nacos:
          config:
            server-addr: 127.0.0.1:8848
          discovery:
            enabled: true
            register-enabled: true
            server-addr: 127.0.0.1:8848

    创建配置文件application.yml

    server:
      port: 8801
    dubbo:
      # Dubbo 服务注册中心配置
      registry:
        # 其中子属性 address 的值 "spring-cloud://localhost",说明挂载到 Spring Cloud 注册中心
        address: spring-cloud://localhost
      application:
        # qos=Quality of Service 是Dubbo的在线运维命令,可以对服务进行动态的配置、控制(上下线)及查询,具体参考:https://blog.csdn.net/u012988901/article/details/84503672
        qos:
          enable: false
      # Dubbo 服务暴露的协议配置
      protocol:
        # 协议名称
        name: dubbo
        # 协议端口( -1 表示自增端口,从 20880 开始)
        port: -1
      # 指定 Dubbo 服务实现类的扫描基准包
      scan:
        base-packages: com.qjc.demo.service.impl

    启动类加上@EnableDiscoveryClient

    创建HelloProvider的实现类,并将其通过注解注册到注册中心

    package com.qjc.demo.service.impl;
    
    import com.qjc.demo.service.HelloProvider;
    import org.apache.dubbo.config.annotation.Service;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    
    @Service
    public class HelloProviderImpl implements HelloProvider {
    
    
        @Override
        public String hello(String name) {
            return "hello! " + name;
        }
    
        @Override
        public List<Map<String, String>> testMapList(Map<String, String> map) {
            List<Map<String, String>> list = new ArrayList<Map<String, String>>();
            list.add(map);
            Map<String, String> map2 = new HashMap<String, String>();
            map2.put("key1", "value1");
            map2.put("key2", "value2");
            list.add(map2);
            return list;
        }
    }

    创建服务消费者

    nacos-dubbo-consumer,导入依赖

    <dependencies>
            <dependency>
                <groupId>com.qjc.demo</groupId>
                <artifactId>nacos-dubbo-api</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-dubbo</artifactId>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>
        </dependencies>

    创建配置文件bootstrap.yml

    spring:
      application:
        name: nacos-dubboe-consumer
      main:
        allow-bean-definition-overriding: true
      cloud:
        nacos:
          config:
            server-addr: 127.0.0.1:8848
          discovery:
            enabled: true
            register-enabled: true
            server-addr: 127.0.0.1:8848

    创建配置文件application.yml

    server:
      port: 8802
    dubbo:
      # Dubbo 服务注册中心配置
      registry:
        # 其中子属性 address 的值 "spring-cloud://localhost",说明挂载到 Spring Cloud 注册中心
        address: spring-cloud://localhost
      application:
        # qos=Quality of Service 是Dubbo的在线运维命令,可以对服务进行动态的配置、控制(上下线)及查询,具体参考:https://blog.csdn.net/u012988901/article/details/84503672
        qos:
          enable: false
      cloud:
        # 要订阅服务的服务名:及服务提供方的 spring.application.name的值,也就是服务提供方的应用名。
        subscribed-services: nacos-dubbo-provider

    启动类加上@EnableDiscoveryClient

    引用Dubbo服务

    package com.qjc.demo.controller;
    
    import com.qjc.demo.service.HelloProvider;
    import org.apache.dubbo.config.annotation.Reference;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.bind.annotation.RestController;
    
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    @RestController
    public class HelloController {
    
        @Reference
        HelloProvider helloProvider;
    
        @GetMapping(value = "/api/hello")
        @ResponseBody
        public String index(@RequestParam("name") String name) {
            return helloProvider.hello(name);
        }
    
        @GetMapping(value = "/api/testMapList")
        @ResponseBody
        public List<Map<String, String>> testMapList() {
            Map<String, String> map = new HashMap<String, String>();
            map.put("hello", "nacos-dubbo");
            return helloProvider.testMapList(map);
        }
    
    }

    Gitee项目地址:https://gitee.com/xiaorenwu_dashije/nacos-dubbo-demo.git

     启动服务提供者和服务消费者,并查看注册中心:

     然后测试消费者

     响应如下:

     表示整合成功,同时该接口也可以通过feign和ribbon调用

  • 相关阅读:
    Android面试题目整理与解说(一)
    Linux 6.3下安装Oracle Enterprise Cloud Control 12c
    xcode5. 安装cocos2d-x 学习中。。。
    Bootstrap组件之输入框组
    洛谷P2852 [USACO06DEC]牛奶模式Milk Patterns
    洛谷P2870 [USACO07DEC]最佳牛线,黄金Best Cow Line, Gold
    洛谷P4051 [JSOI2007]字符加密
    洛谷P3809 【模板】后缀排序
    洛谷P2598 [ZJOI2009]狼和羊的故事
    洛谷P1345 [USACO5.4]奶牛的电信Telecowmunication
  • 原文地址:https://www.cnblogs.com/java-spring/p/13803668.html
Copyright © 2011-2022 走看看