SpringBoot集成dubbo入门案例
注:本人参考此博客案例集成。
可配合原博主博客阅读此文
1.项目结构截图
1.1首先创建空项目dubbo-test (这里我创建的是maven,也行)
1.2创建SpringBoot项目api,consumer,provider
- api目录:存放消费者与提供者调用的service接口(我在创建时为了方便直接创建的springboot项目,网上推荐时普通的maven项目)
- consumer目录:消费者目录 调用提供者远程提供的接口实现
- 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相关