SpringBoot集成dubbo入门案例

SpringBoot集成dubbo入门案例

注:本人参考此博客https://blog.csdn.net/belonghuang157405/article/details/84070689案例集成。

可配合原博主博客阅读此文

1.项目结构截图

项目结构

1.1首先创建空项目dubbo-test (这里我创建的是maven,也行)
1.2创建SpringBoot项目api,consumer,provider
  1. api目录:存放消费者与提供者调用的service接口(我在创建时为了方便直接创建的springboot项目,网上推荐时普通的maven项目)
  2. consumer目录:消费者目录 调用提供者远程提供的接口实现
  3. provider目录:提供者目录 提供给消费者接口实现
2.zookeeper(windows版本)

前往官方网站下载https://downloads.apache.org/zookeeper/zookeeper-3.7.0/

下载完成后解压 修改conf目录下zoo.cfg文件(zoo_sample.cfg重命名)

dataDir=D:\\WorkSoftInstallPath\\zookeeper\\apache-zookeeper-3.7.0-bin\\data dataLogDir=D:\\WorkSoftInstallPath\\zookeeper\\apache-zookeeper-3.7.0-bin\\log

修改为自己的位置

3.代码编写
3.1 api

在api工程中创建接口CostService

public interface CostService {
    Integer add(int cost);
}
<?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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.3</version>
        <relativePath/>
    </parent>
    <groupId>com.xi</groupId>
    <artifactId>api</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>api</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.7.0</version>
            <exclusions>
                <exclusion>
                    <artifactId>slf4j-log4j12</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.11</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

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

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

</project>

这样api就结束了

3.2 provider api接口实现以及dubbo配置
3.2.1provider的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 https://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.5.3</version>
        <relativePath/> 
    </parent>
    <groupId>com.xi</groupId>
    <artifactId>provider</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>provider</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>

        <dependency>
        <groupId>com.alibaba.boot</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>0.2.0</version>
    </dependency>
        <dependency>
            <groupId>com.xi</groupId>
            <artifactId>api</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

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

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

</project>
3.2.2application.yaml 注意格式 及其端口号
dubbo:
  application:
    name: dubbo-provider
  registry:
    address: 127.0.0.1:2181
    check: false
    protocol: zookeeper
  protocol:
    name: dubbo
    port: 30003
  monitor:
    protocol: registry
  consumer:
    check: false
    timeout: 3000

server:
  port: 8062

CostService的实现类

package com.xi.service;

import com.alibaba.dubbo.config.annotation.Service;

@Service
public class CostServiceImpl implements CostService {
    private final Integer totalCost = 1000;

    @Override
    public Integer add(int cost) {
         return totalCost + cost;
    }
}

注意这个service注解为dubbo的,不是spring的

3.2.3使用 @EnableDubbo 注解开启dubbo
package com.xi;

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

@SpringBootApplication
@EnableDubbo
public class ProviderApplication {

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

}

到这里提供者的代码就结束了,consumer和provider类似

3.3 consumer消费者

3.3.1 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 https://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.5.3</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.xi</groupId>
    <artifactId>consumer</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>consumer</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>com.xi</groupId>
            <artifactId>api</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.0</version>
        </dependency>

        <dependency>

            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</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>
            <version>RELEASE</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>

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

</project>
3.3.2 application.yaml
dubbo:
  application:
    name: dubbo-consumer
  registry:
    address: 127.0.0.1:2181
    protocol: zookeeper
    check: false
  monitor: registry
  consumer:
    check: false
    timeout: 3000
server:
  port: 8061
3.3.3使用 @EnableDubbo 注解开启dubbo ConsumerApplication.java 启动类
package com.xi;

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

@SpringBootApplication
@EnableDubbo
public class ConsumerApplication {

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

}
3.3.4编写消费者的service模拟场景,在消费者的service中调用提供者的service
package com.xi.service;

public interface ProductService {
    Integer getCost(int a);
}

实现类

package com.xi.service;

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


@Service
public class ProductServiceImpl implements ProductService{
    @Reference
    private CostService costService;

    @Override
    public Integer getCost(int a) {
        return costService.add(a);
    }
}

注:Reference注解是dubbo的

3.3.5 编写一个controller模拟调用
package com.xi.controller;

import com.xi.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ProductController {
    @Autowired
    private ProductService productService;
    @RequestMapping("/add")
    public String hello(int a){
        return "金额"+productService.getCost(a);
    }
}
4.1 分别启动consumer和provider项目看看是否成功

如果一切没有问题

在这里插入图片描述

注:zookeeper要先启动 bin目录下 双击zkServer.cmd

4.2 dubbo-admin 使用管理平台看一下

如果有dubbo-admin的war包直接放在tomcat的webapp目录下

没有的https://github.com/apache/dubbo/tree/2.5.x 下载zip文件,解压好

在dubbo-2.5.x\dubbo-admin\src\main\webapp\WEB-INF目录

修改dubbo.properties文件,好像不需要修改保险起见还是看一下

dubbo.registry.address=zookeeper://127.0.0.1:2181 dubbo.admin.root.password=root dubbo.admin.guest.password=guest

然后在dubbo-2.5.x目录执行 mvn clean package -Dmaven.test.skip=true ;

将文件打成war包

这里需要网络和一些时间 完成后可以看到 target下有个war包,将其放在Tomcat下

至于Tomcat如何下载请自行百度

tomcat正常启动后 http://localhost:8888/dubbo-admin-2.5.10/ 名称不一定是我这个,主要看你的war名称

需要输入密码 用户名root 密码也是root, 和你配置的dubbo.properties相关
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值