0. 背景
说起Dubbo为什么要和SpringBoot进行整合,一句话:大势所趋。
SpringBoot毕竟是当前统治Java开发的生态圈核心框架。
它的自动装配,健康检查,简易快速开发等功能能够让Dubbo发挥其更大的价值。
1. 创建项目骨架
我们创建一个pom项目,命名为: dubbo-springboot-demo。
在它下面我们创建两个模块,分别为springboot-provider, pom类型; springboot-consumer, jar类型。
springboot-provider下面创建2个模块,分别为sample-api和sample-provider,都是jar类型。
创建完毕后,项目结构见下图:
![](https://img.haomeiwen.com/i12347236/d405b72dadf8504a.png)
在主项目中加入lombok依赖
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
2. 服务提供者
我们先来构建服务提供者的接口声明
在sample-api项目下添加一个接口
HelloService
package org.genesis.javacollector.dubbo.provider.api;
public interface HelloService {
String sayHello(String name);
}
在sample-provider项目中添加dubbo和springboot所需要的必要的依赖
<dependencies>
<dependency>
<groupId>org.genesis</groupId>
<artifactId>sample-api</artifactId>
<version>1.0-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-web</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.5</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.9</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
添加接口的实现
HelloServiceImpl
package org.genesis.javacollector.dubbo.provider.impl.service;
import org.apache.dubbo.config.annotation.Service;
import org.genesis.javacollector.dubbo.provider.api.HelloService;
import org.springframework.beans.factory.annotation.Value;
@Service(version = "1.0-SNAPSHOT", interfaceClass = HelloService.class)
public class HelloServiceImpl implements HelloService {
@Value("${dubbo.application.name}")
private String serviceName;
@Override
public String sayHello(String name) {
return String.format("[%s]: Hello, %s", serviceName, name);
}
}
配置dubbo
application.properties
spring.application.name=springboot-provider
dubbo.application.name=sample-provider
dubbo.registry.protocol=zookeeper
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
程序主入口添加Dubbo组件扫描 @DubboComponentScan
(注: 这个步骤很容易忘记)
ProviderApplication
package org.genesis.javacollector.dubbo.provider.impl;
import org.apache.dubbo.config.spring.context.annotation.DubboComponentScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@DubboComponentScan
@SpringBootApplication
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}
3. 服务消费者
在sample-consumer项目中添加dubbo和springboot所需要的必要的依赖
同sample-provider
添加一个controller
ConsumerController
package org.genesis.javacollector.dubbo.consumer.controller;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.Reference;
import org.genesis.javacollector.dubbo.provider.api.HelloService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/consumer")
@Slf4j
public class ConsumerController {
@Reference(version = "1.0-SNAPSHOT")
private HelloService helloService;
@GetMapping(value = "/test")
public void test() {
String hello = helloService.sayHello("KG");
log.info(hello);
}
}
添加Dubbo配置
application.properties
#dubbo configuration
dubbo.application.name=dubbo-consumer
dubbo.registry.protocol=zookeeper
dubbo.registry.address=zookeeper://127.0.0.1:2181
#避免端口冲突
server.port=8085
ConsumerApplication入口程序无变化,不需要添加任何额外的dubbo注解。
运行程序:
- 启动Zookeeper
- 启动sample-provider
- 启动springboot-consumer
- 浏览器输入: http://localhost:8085/consumer/test
- 客户端输出结果:
[sample-provider]: Hello, KG
网友评论