
初始化、异步、同步
第一步容器运行,容器上面启动提供者,由提供者注册到注册中心
第二部消费者订阅注册中心,由注册中心异步通知回消费者
第四步invoke调用提供者
第五步二者异步到监控中心汇报
同步HTTP、RPC
去官网找一个案例项目
http://dubbo.apache.org/en-us/

找个spring-boot的例子


https://github.com/apache/dubbo-spring-boot-project/blob/master/README_CN.md

创建服务接口项目
创建目录hello-dubbo
打开IDEA
创建一个maven项目提供接口


放到刚才的目录下

没有直接建工程,每个项目都是一个的服务
pom.xml中添加
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
新建包新建接口

定义一个方法
package com.suntong.hello.dubbo.service.user.api;
public interface UserService {
String sayHi();
}
创建服务提供者项目
再创建一个新项目


什么也不用选,因为是rpc通信,不是web项目,就是个普通的javase项目


项目框架

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.2.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.suntong</groupId>
<artifactId>hello-dubbo-service-usr-provider</artifactId>
<version>1.0.0-SNAPSHOT</version>
<name>hello-dubbo-service-user-provider</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.4.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>com.suntong</groupId>
<artifactId>hello-dubbo-service-user-api</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.suntong.hello.dubbo.service.user.provider.HelloDubboServiceUserProviderApplication</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>
application.yml
# Spring boot application
spring:
application:
name: hello-dubbo-service-usr-provider
# UserService service version
user:
service:
version: 1.0.0
# Dubbo Config properties
dubbo:
## Base packages to scan Dubbo Component:@com.alibaba.dubbo.config.annotation.Service
scan:
basePackages: com.suntong.hello.dubbo.service.user.provider.api
## ApplicationConfig Bean
application:
id: hello-dubbo-service-user-provider
name: hello-dubbo-service-user-provider
qos-port: 22222
qos-enable: true
## ProtocolConfig Bean
protocol:
id: dubbo
name: dubbo
port: 12345
status: server
## RegistryConfig Bean
registry:
id: zookeeper
address: zookeeper://192.168.79.130:2181?backup=192.168.79.130:2182,192.168.79.130:2183
# Enables Dubbo All Endpoints 状态检查
management:
endpoint:
dubbo:
enabled: true
dubbo-shutdown:
enabled: true
dubbo-configs:
enabled: true
dubbo-services:
enabled: true
dubbo-references:
enabled: true
dubbo-properties:
enabled: true
# Dubbo Health
health:
dubbo:
status:
## StatusChecker Name defaults (default : "memory", "load" )
defaults: memory
## StatusChecker Name extras (default : empty )
extras: load,threadpool
HelloDubboServiceUserProviderApplication.java
package com.suntong.hello.dubbo.service.user.provider;
import org.apache.dubbo.container.Main;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class HelloDubboServiceUserProviderApplication {
public static void main(String[] args) {
SpringApplication.run(HelloDubboServiceUserProviderApplication.class, args);
//容器之上启动一个服务提供者
Main.main(args);
}
}
UserServiceImpl.java
package com.suntong.hello.dubbo.service.user.provider.api.impl;
import com.alibaba.dubbo.config.annotation.Service;
import com.suntong.hello.dubbo.service.user.api.UserService;
@Service(version = "${user.service.version}")
public class UserServiceImpl implements UserService {
@Override
public String sayHi() {
return "hello dubbo";
}
}
启动zookeeper
启动dubbo-admin-server
地洞dubbo-admin-ui
注意mvn clean install
将api项目打包放进本地仓库
访问http://localhost:8082

此时可以看到服务已注册
注意依赖版本到maven仓库中查找到合适的,启动ui之前一定要启动server,不然dubbo管理控制台没用,还有不要忘记启动zookeeper。
创建服务消费者项目
新建spring项目


依旧什么都不选


将provider的pom粘贴过来,注意无法导入依赖时修改maven仓库配置

注意修改入口类配置
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.2.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.suntong</groupId>
<artifactId>hello-dubbo-service-user-consumer</artifactId>
<version>1.0.0-SNAPSHOT</version>
<name>hello-dubbo-service-user-consumer</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.4.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>com.suntong</groupId>
<artifactId>hello-dubbo-service-user-api</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.suntong.hello.dubbo.service.user.provider.HelloDubboServiceUserConsumerApplication</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>
建错了,前面初始化时应该勾选web。因为消费者涉及到前端了,把spring-boot-starter
改成spring-boot-starter-web
可以启动内部tomcat,就可以写controller了。
新建controller
UserController.java
package com.suntong.hello.dubbo.service.user.consumer.controller;
import com.suntong.hello.dubbo.service.user.api.UserService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@Reference(version = "${user.service.version}")
private UserService userService;
@RequestMapping(value = "hi", method = RequestMethod.GET)
public String sayHi(){
return userService.sayHi();
}
}
application.yml
# Spring boot application
spring:
application:
name: hello-dubbo-service-user-consumer
server:
port: 9090
# UserService service version
user:
service:
version: 1.0.0
# Dubbo Config properties
dubbo:
scan:
basePackages: com.suntong.hello.dubbo.service.user.consumer.controller
## ApplicationConfig Bean
application:
id: hello-dubbo-service-user-consumer
name: hello-dubbo-service-user-consumer
## RegistryConfig Bean
registry:
id: zookeeper
address: zookeeper://192.168.79.130:2181?backup=192.168.79.130:2182,192.168.79.130:2183
# Dubbo Endpoint (default status is disable)
endpoints:
dubbo:
enabled: true
management:
server:
port: 9091
# Dubbo Health
health:
dubbo:
status:
## StatusChecker Name defaults (default : "memory", "load" )
defaults: memory
# Enables Dubbo All Endpoints
endpoint:
dubbo:
enabled: true
dubbo-shutdown:
enabled: true
dubbo-configs:
enabled: true
dubbo-services:
enabled: true
dubbo-references:
enabled: true
dubbo-properties:
enabled: true
endpoints:
web:
exposure:
include: "*"
注意修改server端口号,8080被控制台占用了
启动aplication
访问http://localhost:9090/hi

RPC通信成功,RPC
就是为了实现再项目中调用接口时和单体一摸一样。
网友评论