构建一个简单的RPC例子
demo说明
一个api项目,管理接口一个生产者项目,实现接口一个消费者项目,消费接口
启动后请求截图 http://localhost:9090/say
启动后nacos截图
创建一个API
一个简单的maven项目,创建一个接口
项目截图
public interface ISayHelloService {
String
say(String msg
);
}
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>my-spring-dubbo
</artifactId>
<groupId>my-spring-dubbo
</groupId>
<version>1.0-SNAPSHOT
</version>
</parent>
<modelVersion>4.0.0
</modelVersion>
<artifactId>my-spring-dubbo-api
</artifactId>
<dependencies>
<dependency>
<groupId>junit
</groupId>
<artifactId>junit
</artifactId>
<version>4.11
</version>
<scope>test
</scope>
</dependency>
</dependencies>
<build>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-clean-plugin
</artifactId>
<version>3.1.0
</version>
</plugin>
<plugin>
<artifactId>maven-resources-plugin
</artifactId>
<version>3.0.2
</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin
</artifactId>
<version>3.8.0
</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin
</artifactId>
<version>2.22.1
</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin
</artifactId>
<version>3.0.2
</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin
</artifactId>
<version>2.5.2
</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin
</artifactId>
<version>2.8.2
</version>
</plugin>
<plugin>
<artifactId>maven-site-plugin
</artifactId>
<version>3.7.1
</version>
</plugin>
<plugin>
<artifactId>maven-project-info-reports-plugin
</artifactId>
<version>3.0.0
</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
创建一个服务生产者
dubbo项目启动使用 DubboComponentScan 扫描提供的RPC服务配置文件中要配置注册中心
package com
.my
.spring
.dubbo
.provider
;
import org
.apache
.dubbo
.config
.spring
.context
.annotation
.DubboComponentScan
;
import org
.springframework
.boot
.SpringApplication
;
import org
.springframework
.boot
.autoconfigure
.SpringBootApplication
;
@DubboComponentScan(basePackages
= "com.my.spring.dubbo.provider.service")
@SpringBootApplication
public class DubboProviderApplication {
public static void main(String
[] args
) {
SpringApplication
.run(DubboProviderApplication
.class);
}
}
import com
.my
.spring
.dubbo
.api
.ISayHelloService
;
import org
.apache
.dubbo
.config
.annotation
.DubboService
;
import org
.springframework
.beans
.factory
.annotation
.Value
;
@DubboService(protocol
= {"dubbo"},
loadbalance
= "random")
public class SayHelloServiceImpl implements ISayHelloService {
@Value("${server.port}")
private Integer port
;
@Override
public String
say(String msg
) {
try {
Thread
.sleep(1000);
} catch (InterruptedException e
) {
e
.printStackTrace();
}
System
.out
.println("Msg:"+System
.currentTimeMillis());
return "[version1.0]-"+port
+"Hello,"+msg
+" my name is jack。";
}
}
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>my-spring-dubbo
</artifactId>
<groupId>my-spring-dubbo
</groupId>
<version>1.0-SNAPSHOT
</version>
</parent>
<modelVersion>4.0.0
</modelVersion>
<artifactId>my-spring-dubbo-provider
</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot
</groupId>
<artifactId>spring-boot-starter-web
</artifactId>
</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>
<dependency>
<groupId>my-spring-dubbo
</groupId>
<artifactId>my-spring-dubbo-api
</artifactId>
<version>1.0-SNAPSHOT
</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo
</groupId>
<artifactId>dubbo-spring-boot-starter
</artifactId>
<version>2.7.7
</version>
</dependency>
<dependency>
<groupId>com.alibaba.nacos
</groupId>
<artifactId>nacos-client
</artifactId>
<version>1.2.1
</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo
</groupId>
<artifactId>dubbo-dependencies-zookeeper
</artifactId>
<version>2.7.7
</version>
<type>pom
</type>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins
</groupId>
<artifactId>maven-compiler-plugin
</artifactId>
<version>3.8.1
</version>
<configuration>
<source>1.8
</source>
<target>1.8
</target>
<encoding>UTF-8
</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot
</groupId>
<artifactId>spring-boot-maven-plugin
</artifactId>
<version>2.3.0.RELEASE
</version>
<configuration>
<mainClass>com.my.spring.dubbo.provider.DubboProviderApplication
</mainClass>
</configuration>
<executions>
<execution>
<id>repackage
</id>
<goals>
<goal>repackage
</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
创建一个服务消费者
消费者使用RPC服务,用@DubboReference注解
package com
.my
.spring
.dubbo
.consumer
.controller
;
import com
.my
.spring
.dubbo
.api
.ISayHelloService
;
import org
.apache
.dubbo
.config
.annotation
.DubboReference
;
import org
.springframework
.web
.bind
.annotation
.GetMapping
;
import org
.springframework
.web
.bind
.annotation
.RestController
;
@RestController
public class SayHelloController {
@DubboReference
ISayHelloService sayHelloService
;
@GetMapping("/say")
public String
say() {
return sayHelloService
.say("jack");
}
}
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>my-spring-dubbo
</artifactId>
<groupId>my-spring-dubbo
</groupId>
<version>1.0-SNAPSHOT
</version>
</parent>
<modelVersion>4.0.0
</modelVersion>
<artifactId>my-spring-dubbo-consumer
</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot
</groupId>
<artifactId>spring-boot-starter-web
</artifactId>
</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>
<exclusions>
<exclusion>
<groupId>org.junit.vintage
</groupId>
<artifactId>junit-vintage-engine
</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>my-spring-dubbo
</groupId>
<artifactId>my-spring-dubbo-api
</artifactId>
<version>1.0-SNAPSHOT
</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo
</groupId>
<artifactId>dubbo-spring-boot-starter
</artifactId>
<version>2.7.7
</version>
</dependency>
<dependency>
<groupId>com.alibaba.nacos
</groupId>
<artifactId>nacos-client
</artifactId>
<version>1.2.1
</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo
</groupId>
<artifactId>dubbo-dependencies-zookeeper
</artifactId>
<version>2.7.7
</version>
<type>pom
</type>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot
</groupId>
<artifactId>spring-boot-dependencies
</artifactId>
<version>${spring-boot.version}
</version>
<type>pom
</type>
<scope>import
</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins
</groupId>
<artifactId>maven-compiler-plugin
</artifactId>
<version>3.8.1
</version>
<configuration>
<source>1.8
</source>
<target>1.8
</target>
<encoding>UTF-8
</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot
</groupId>
<artifactId>spring-boot-maven-plugin
</artifactId>
<version>2.3.0.RELEASE
</version>
<configuration>
<mainClass>com.my.spring.dubbo.consumer.DubboConsumerApplication
</mainClass>
</configuration>
<executions>
<execution>
<id>repackage
</id>
<goals>
<goal>repackage
</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>