springboot集成dubbo-spring-boot-starter 实现dubbo RPC远程调用
dubbo-spring-boot-starter Git源码地址: https://github.com/alibaba/dubbo-spring-boot-starter.git
创建一个SpringBoot Maven 项目(blog),且包含多个子项目(blog-api,blog-service,blog-web),在pom 文件中进行相关依赖:
blog父项目pom.xml
<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">
<modelVersion>4.0.0</modelVersion>
<groupId>com.zzg</groupId>
<artifactId>blog</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.6.RELEASE</version>
</parent>
<modules>
<module>blog-api</module>
<module>blog-service</module>
<module>blog-web</module>
</modules>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<dubbo-spring-boot-starter.version>0.1.0</dubbo-spring-boot-starter.version>
<springboot.version>1.5.8.RELEASE</springboot.version>
<fastjson-version>1.2.31</fastjson-version>
<zk-client.version>0.2</zk-client.version>
<dockerfile-maven.version>1.4.3</dockerfile-maven.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>${dubbo-spring-boot-starter.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
<version>${springboot.version}</version>
</dependency>
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>${zk-client.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
创建一个子项目blog-api:注意用于提供接口。(pom.xml 和 相关代码如下)
<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">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.zzg</groupId>
<artifactId>blog</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>blog-api</artifactId>
</project>
接口定义如下:
package com.springboot.blog.api;
public interface RpcService {
public String rpc(String parame);
}
创建一个子项目blog-service:服务提供者。(注意涉及:dubbo和springboot的集成配置)
pom.xml
<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">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.zzg</groupId>
<artifactId>blog</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>blog-service</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<artifactId>zookeeper</artifactId>
<groupId>org.apache.zookeeper</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>com.zzg</groupId>
<artifactId>blog-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
application.properties (dubbo配置文件)
spring.application.name=blog-service
server.port=9090
#dubbo\u914D\u7F6E
dubbo.application.id=blog-service
dubbo.application.name=blog-service
#\u534F\u8BAE\u914D\u7F6E
dubbo.protocol.id=dubbo
dubbo.protocol.name=dubbo
#\u628A\u9ED8\u8BA4\u768420880\u7AEF\u53E3\u6362\u621012345
dubbo.protocol.port=12345
#\u670D\u52A1\u6CE8\u518C\u914D\u7F6E
dubbo.registry.id=my-registry
dubbo.registry.address=zookeeper://localhost:2181
#\u914D\u7F6Edubbo\u7684\u5305\u626B\u63CF\uFF0C\u9488\u5BF9dubbo\u7684@Service, @Reference\u6CE8\u89E3
dubbo.scan.base-packages=com.springboot.blog.support
#dubbo\u5065\u5EB7\u76D1\u63A7
endpoints.dubbo.enabled=true
management.health.dubbo.status.defaults=memory
management.health.dubbo.status.extras=load,threadpool
management.port=9091
服务实现类和项目入口
package com.springboot.blog.support;
import com.alibaba.dubbo.config.annotation.Service;
import com.springboot.blog.api.RpcService;
@Service(version = "1.0.0", application = "${dubbo.application.id}", protocol = "${dubbo.protocol.id}", registry = "${dubbo.registry.id}")
public class RpcServiceImpl implements RpcService {
@Override
public String rpc(String parame) {
// TODO Auto-generated method stub
return "this params is :" + parame;
}
}
package com.springboot.blog;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringBootService {
public static void main(String[] args) {
// TODO Auto-generated method stub
SpringApplication.run(SpringBootService.class, args);
System.out.println("============= SpringBoot Service Start Success =============");
}
}
创建一个子项目blog-web:服务消费者。(注意涉及:dubbo和springboot的集成配置)
pom.xml
<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">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.zzg</groupId>
<artifactId>blog</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>blog-web</artifactId>
<dependencies>
<!-- Spring Boot dependencies -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>com.zzg</groupId>
<artifactId>blog-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
application.properties(dubbo配置文件)
spring.application.name=blog-web
server.port=8081
#dubbo\u914D\u7F6E
dubbo.application.id=blog-web
dubbo.application.name=blog-web
#\u670D\u52A1\u6CE8\u518C\u914D\u7F6E
dubbo.registry.id=my-registry
dubbo.registry.address=zookeeper://localhost:2181
management.port=8082
远程服务消费者和SpringBoot入口
package com.springboot.blog.web;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.alibaba.dubbo.config.annotation.Reference;
import com.springboot.blog.api.RpcService;
@RestController
@RequestMapping("/dubbo")
public class RpcController {
@Reference(version = "1.0.0")
private RpcService service;
@RequestMapping("/rpc")
public void rpc() {
System.out.println(service.rpc("rpc 远程调用"));
}
}
package com.springboot.blog.web;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringBootWeb {
public static void main(String[] args) {
// TODO Auto-generated method stub
SpringApplication.run(SpringBootWeb.class, args);
System.out.println("============= SpringBoot Web Start Success =============");
}
}
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。