SpringBoot整合Dubbo示例(不使用注册中心)
文中说明不当的,欢迎指正!
前言
熟悉dubbo的朋友都知道,dubbo可通过指定Url方式绕过注册中心直连指定的服务地址,所以想当然会想到那么可不可以不使用注册中心。本文就是SpringBoot整合Dubbo(无注册中心)的示例展示。本文中SpringBoot版本用的是2.0.2.RELEASE。
提供者dubbo-provider
配置pom.xml
<dependencies>
<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>
</dependency>
<!-- 版本号根据可实际情况确定 -->
<!-- Spring Boot使用dubbo-spring-boot-starter集成Dubbo -->
<dependency>
<groupId>io.dubbo.springboot</groupId>
<artifactId>spring-boot-starter-dubbo</artifactId>
<version>1.0.0</version>
</dependency>
<!-- 日志依赖 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
配置application.properties
server.port=8082
spring.dubbo.application.name=dubbo-provider
# N/A表示不使用注册中心
spring.dubbo.registry.address=N/A
# dubbo协议
spring.dubbo.protocol.name=dubbo
# duboo端口号
spring.dubbo.protocol.port=20882
# 发布到dubbo的接口所在包位置,自行定
spring.dubbo.scan=com.sd.service
编写Service
DemoService.java
public interface DemoService {
String hello(String name);
}
DemoServiceImpl.java
@Service(version = "1.0.0")
public class DemoServiceImpl implements DemoService {
@Value("${server.port}")
private String server_port;
@Override
public String hello(String name) {
return "From "+server_port+" Spring-Boot-Starter Provider, Hello "+name;
}
}
注意:@Service是com.alibaba.dubbo.config.annotation.Service
启动dubbo-provider
执行启动类里的main方法,即可启动该项目。
@SpringBootApplication
public class DubboProviderApplication {
public static void main(String[] args) {
SpringApplication.run(DubboProviderApplication.class, args);
}
}
如果想看是否发布成功,也可以采用windows下执行cmd命令: telnet 127.0.0.1 20882,端口号根据实际情况而定。然后采用ls命令查看已发布的端口,invoke执行相关方法,这个网上例子很多,这里简单提下。
调用者dubbo-client
配置pom.xml
和dubbo-provider基本一样。但是由于我想直接在浏览器测试,所以可以使用依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
配置application.properties
server.port=8099
spring.dubbo.application.name=dubbo-provider
# N/A表示不使用注册中心
spring.dubbo.registry.address=N/A
# 发布到dubbo的接口所在包位置,自行定
spring.dubbo.scan=com.sd.service
编写Service
DemoService.java
public interface DemoService {
String hello(String name);
}
编写Controller
@RestController
@RequestMapping(value = "/no-register-hello")
public class NoRegisterHelloController {
/**
* 直接通过dubbo url调用服务
* */
@Reference(version = "1.0.0", url = "dubbo://127.0.0.1:20882")
private DemoService demoService;
@RequestMapping(value = "/index")
public String index() {
return demoService.hello("Handsome Student");
}
}
启动和测试
用和启动dubbo-provider一样的方式启动dubbo-client,然后可以打开浏览器,输入网址localhost:8099/no-register-hello/index,既可以看到返回,如下图