SpringBoot整合Alibaba-Dubbo和Apache

2022-12-07  本文已影响0人  上善若泪

由于dubbo起初是阿里开发,后来交给了apache维护,所以市场上就有两个版本的dubbo整合

1 Alibaba整合Dubbo

1.1 服务提供者

1.1.1 服务提供者接口

项目结构图


image.png

pom.xm

   <groupId>cn.jzh</groupId>
    <artifactId>dubbo-service</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

接口类

public interface DemoService {
    public String test (String msg);
}

1.1.2 服务提供者实现类

1.1.2.1 项目结构图

image.png

1.1.2.2 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>cn.jzh</groupId>
    <artifactId>dubbo-service-alibaba-impl</artifactId>
    <version>1.0-SNAPSHOT</version>

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

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>


    <dependencies>
        <!-- 接口-->
        <dependency>
            <groupId>cn.jzh</groupId>
            <artifactId>dubbo-service</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!--SpringBoot框架web项目起步依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- Dubbo集成SpringBoot框架起步依赖 -->
        <dependency>
            <groupId>com.alibaba.spring.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>

        <!-- 访问zookeeper客户端 jar包 -->
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.10</version>
            <!--排除依赖里的日志-->
            <exclusions>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-api</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
</project>

1.1.2.3 服务实现类

import cn.jzh.service.DemoService;
import com.alibaba.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;


@Component
// @Service 这个注解使用的不是spring里面的,而是com.alibaba.dubbo.config.annotation.Service。
// timeout 配置超时时间 , interfaceClass 接口类 ,version 服务版本,如果配置了服务版本在消费端引用也必须一样
@Service(timeout = 1000,interfaceClass = DemoService.class)
public class DemoAlibabaServiceImpl implements DemoService {
    @Override
    public String test(String msg) {
        return "dubbo接收信息"+msg;
    }
}

1.1.2.4 配置文件

application.properties

server.port=8081
server.servlet.context-path=/

spring.application.name=spingboot-alibaba-provider

#设置dubbo的配置
dubbo.application.name=springboot-alibaba-provider
# 注册中心
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.protocol.name=dubbo
dubbo.protocol.port=20881

1.1.2.5 启动类

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

@SpringBootApplication
@EnableDubbo // 启动dubbo功能
@EnableDubboConfiguration // 启动dubbo配置
@DubboComponentScan("cn.jzh.service.impl") // 扫描提供者实现类
public class AppAlibaba {
        public static void main(String[] args) {
            SpringApplication.run(AppAlibaba.class,args);
        }
}

1.2 服务消费者

1.2.1 项目结构图示

image.png

提供者和消费者的pom.xml一样,所以就不在此处写pom.xml

1.2.2 请求入口

import cn.jzh.service.DemoService;
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.RestController;

@RestController
public class DemoController {

    // 在这里是使用@Reference去发现服务而不是@Autowired去注入Bean,@Reference里面可以配置version、timeout超时时间
    @Reference
    private DemoService demoService;

    @RequestMapping("/test")
    public String findAllStudent(){
        return demoService.test("测试结果");
    }
}

1.2.3 配置文件

application.properties

server.port=8082
server.servlet.context-path=/

spring.application.name=spingboot-alibaba-consumer

#设置dubbo的配置
dubbo.application.name=springboot-alibaba-consumer
# 注册中心
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.protocol.name=dubbo
dubbo.protocol.port=20881

1.2.4 启动类

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

@SpringBootApplication
@EnableDubbo
@EnableDubboConfiguration
public class AppAlibabaConsumer {
    public static void main(String[] args) {
        SpringApplication.run(AppAlibabaConsumer.class,args);
    }
}

2 Apache整合Dubbo

2.1 服务提供者

2.1.1 服务提供者接口

项目结构图


image.png

pom.xm

   <groupId>cn.jzh</groupId>
    <artifactId>dubbo-service</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

接口类

public interface DemoService {
    public String test (String msg);
}

2.1.2 服务提供者实现类

2.1.2.1 项目结构图

image.png

2.1.2.2 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>

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

    <groupId>cn.jzh</groupId>
    <artifactId>dubbo-service-apache-impl</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <!-- 接口-->
        <dependency>
            <groupId>cn.jzh</groupId>
            <artifactId>dubbo-service</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!--SpringBoot框架web项目起步依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- Dubbo集成SpringBoot框架起步依赖 -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>3.1.2</version>
        </dependency>
        

        <!-- zookeeper依赖 -->
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.13</version>
            <exclusions>
                <exclusion>
                    <artifactId>slf4j-log4j12</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>4.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>4.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-x-discovery</artifactId>
            <version>4.2.0</version>
        </dependency>
    </dependencies>
</project>

2.1.2.3 服务实现类

在新版apache-dubbodubbo提供者注解@Service提示为过时,推荐使用注解@DubboService

package cn.jzh.service.impl;

import cn.jzh.service.DemoService;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.stereotype.Component;

@Component
@DubboService
public class DemoApacheServiceImpl implements DemoService {
    @Override
    public String test(String msg) {
        return "dubbo接收信息"+msg;
    }
}

2.1.2.4 配置文件

application.properties

server.port=8083
server.servlet.context-path=/

spring.application.name=spingboot-apache-provider
#设置dubbo的配置
dubbo.application.name=springboot-apache-provider-dubbo
# 注册中心
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.registry.protocol=zookeeper
dubbo.protocol.name=dubbo
dubbo.protocol.port=20881

2.1.2.5 启动类

package cn.jzh;

import org.apache.dubbo.config.spring.context.annotation.DubboComponentScan;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@EnableDubbo
@SpringBootApplication
@DubboComponentScan("cn.jzh.service.impl")//用来扫描提供的接口实现位置
public class AppApache {

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

2.2 服务消费者

2.2.1 项目结构图示

image.png

提供者和消费者的pom.xml一样,所以就不在此处写pom.xml

2.2.2 请求入口

在新版apache-dubbodubbo提供者注解@Reference提示为过时,推荐使用注解@DubboReference

package cn.jzh.contoller;

import cn.jzh.service.DemoService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class DemoController {
  
    @DubboReference
    private DemoService demoService;
    @RequestMapping("/test")
    public String findAllStudent(){
        return demoService.test("测试结果");
    }
}

2.2.3 配置文件

application.properties

server.port=8084
server.servlet.context-path=/

spring.application.name=spingboot-apache-consumer

#设置dubbo的配置
dubbo.application.name=springboot-apache-consumer-dubbo
# 注册中心
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.registry.protocol=zookeeper
dubbo.protocol.name=dubbo
dubbo.protocol.port=20881

2.2.4 启动类

package cn.jzh;

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

@SpringBootApplication
@EnableDubbo
public class AppApacheConsumer {
    public static void main(String[] args) {
        SpringApplication.run(AppApacheConsumer.class,args);
    }
}
上一篇下一篇

猜你喜欢

热点阅读