最新版dubbo+SpringBoot整合入门
因为最近在面试过程中被问到太多关于你会不会dubbo和Spring Cloud的问题了,Spring Cloud的入门在之前已经尝试过了。因此今天自己根据教程撸了一遍入门。
生产者配置
pom.xml
<properties>
<java.version>1.8</java.version>
<spring-boot.version>2.1.4.RELEASE</spring-boot.version>
<dubbo.version>2.7.1</dubbo.version>
<curator.version>2.8.0</curator.version>
<zookeeper.version>3.4.6</zookeeper.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- Dubbo Spring Boot Starter -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.1</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>2.7.1</version>
</dependency>
<!-- zookeeper -->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>${zookeeper.version}</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
<exclusion>
<groupId>io.netty</groupId>
<artifactId>netty</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>${curator.version}</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>${curator.version}</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>apache.snapshots.https</id>
<name>Apache Development Snapshot Repository</name>
<url>https://repository.apache.org/content/repositories/snapshots</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
application.properties
server.port=8082
dubbo.application.name=first-dubbo-provider
dubbo.scan.base-packages=com.zhao.dubbo.service
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
dubbo.registry.address=zookeeper://127.0.0.1:2181
接口层
接口声明
public interface GreetingService {
String sayHello(String name);
}
接口实现
import com.zhao.dubbo.service.GreetingService;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.beans.factory.annotation.Value;
@Service
public class GreetingServiceImpl implements GreetingService {
@Value("${dubbo.application.name}")
private String serviceName;
@Override
public String sayHello(String name) {
return String.format("[%s][%s] : Hello, %s", serviceName,"2", name);
}
}
但是dubbo官网推荐将接口层单独作为一个独立模块使用。然后生产者和消费者均依赖此模块进行操作,详情请见 http://dubbo.apache.org/zh-cn/docs/user/quick-start.html
在上述实现没有接口层模块时要特别注意,如果生产者和消费者没有使用同样的报名 ,可能会出现dubbo异常:Failed to check the status of the service . No provider available for the service。此时需要统一接口层的包名才可以正常运行
消费者配置
接口层配置
接口声明
public interface GreetingService {
String sayHello(String name);
}
与生产者完全一致
pom配置
同理pom.xml与生产者完全一致
application.properties配置
server.port=8081
spring.application.name=first-dubbo-consumer
dubbo.registry.address=zookeeper://127.0.0.1:2181
调用
- 启动zookeeper
调用之前,我们需要将使用的zookeeper启动
我们直接在启动类中采用轮询式调用
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import java.util.concurrent.TimeUnit;
@SpringBootApplication
public class DubboConsumerApplication {
@Reference
private GreetingService greetingService;
public static void main(String[] args) {
SpringApplication.run(DubboConsumerApplication.class, args);
}
@Bean
public ApplicationRunner runner(){
int count = 0;
while (true) {
System.out.println(greetingService.sayHello("World "));
try {
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException e) {
e.printStackTrace();
}
count++;
if (count == 100) {
break;
}
}
return s -> {
System.out.println(greetingService.sayHello("World"));
};
}
}
即可发现,调用成功
dubbo-admin控制台
首先在github上下载dubbo-admin项目。 地址 https://github.com/apache/incubator-dubbo-admin/blob/develop/README_ZH.md
使用Eclipse或IDEA直接默认方式启动就可以了。
然后使用npm安装前端包内的依赖包之后,使用npm run dev启动
使用 localhost:8081 进行访问
即可发现我们的服务提供者已显示成功。
还没有评论,来说两句吧...