赞
踩
首先创建一个空的项目。在项目中创建两个项目,分别为 service-api , service-server。
service-api: 存放接口,独立成一个工程方便被其它服务工程依赖。
service-server: 存放接口实现,即dubbo服务的实现部分。
service-api 工程:
在pom文件中添加
<packaging>pom</packaging>
//定义一个接口
public interface ServiceApi {
public String dubboService();
}
service-server工程:
<dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-dubbo</artifactId> </dependency> <!--添加service-api工程依赖--> <dependency> <groupId>org.sparks</groupId> <artifactId>dubbo-service-api</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies>
server: port: 8100 #启动端口 命令行注入 spring: application: name: dubbo_service main: allow‐bean‐definition‐overriding: true # Spring Boot 2.1 需要设定 cloud: nacos: discovery: server‐addr: 127.0.0.1:8848 scan: # dubbo 服务扫描基准包 base‐packages: com.sparks.dubbo.service.api protocol: # dubbo 协议 name: dubbo port: 20891 # dubbo 协议端口 registry: address: nacos://localhost:8848 application: qos‐enable: false #dubbo运维服务是否开启 consumer: check: false #启动时就否检查依赖的服务
接口实现:
import org.apache.dubbo.config.annotation.Service;
@Service
public class ServiceApiImpl implements ServiceApi{
public String dubboService() {
return "dubboService";
}
}
注意 @Service 的包路径。
启动类:
@SpringBootApplication
public class ServiceApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceApplication.class,args);
}
}
启动服务提供者。
出现的问题:
启动时报错:Connection refused(Connection refused)
原因:dubbo获取本机所有网卡中的ip地址,然后拿到第一个不是127.0.0.1的那个ip。
解决:在 bootstrap.yml 中添加
dubbo:
provider:
host: 主机ip
添加依赖:
<dependencies> <!--SpringCloud ailibaba nacos --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!-- SpringBoot整合Web组件 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-dubbo</artifactId> </dependency> <!-- service-api接口依赖--> <dependency> <groupId>org.sparks</groupId> <artifactId>dubbo-service-api</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies>
实现接口调用:
import org.apache.dubbo.config.annotation.Reference;
@RestController
public class ConsumerController {
@Reference
ServiceApi serviceApi;
@GetMapping(value = "/dubbo")
public String dubboService2(){
//远程调用service2
String providerResult = serviceApi.dubboService();
return "consumer dubbo invoke | " + providerResult;
}
}
注意 @Reference 的包路径,不要导错包。
启动消费者。请求路径: http://localhost:9000/dubbo,
出现 consumer dubbo invoke | dubboService 表示消费者成功调用 service.
功能:
实现消费者调用 service-2 , service-2 调用 service。
步骤:
如上,创建dubbo-service2 父工程。
创建 dubbo-service2-api工程。
创建 dubbo-service2-server工程。
dubbo-service2-api工程:
接口:
public interface Service2Api {
public String dubboService2();
}
dubbo-service2-server 工程
导入依赖:
<dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-dubbo</artifactId> </dependency> <!--service-api工程依赖--> <dependency> <groupId>org.sparks</groupId> <artifactId>dubbo-service-api</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <!--service2-api工程依赖--> <dependency> <groupId>org.sparks</groupId> <artifactId>dubbo-service2-api</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies>
接口实现: 调用 service1 接口 。
@Service
public class Service2ApiImpl implements Service2Api{
@Reference
ServiceApi serviceApi;
public String dubboService2() {
//调用service1
String s1 = serviceApi.dubboService();
return "dubboService2|" + s1;
}
}
配置文件只需修改:
server:
port: 8101 #启动端口 命令行注入
spring:
application:
name: dubbo_service_2
dubbo:
scan:
base‐packages: com.sparks.dubbo.service2.api
protocol:
port: 20892
添加 service2-api 依赖
<dependency>
<groupId>org.sparks</groupId>
<artifactId>dubbo-service2-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
调用 service2接口
@RestController
public class Service2Controller {
@Reference
Service2Api service2Api;
@GetMapping(value = "/dubbo2")
public String service1() {
String providerResult = service2Api.dubboService2();
return "consumer dubbo invoke | " + providerResult;
}
}
将 service1 service2 consumer 分别启动后,
访问 localhost:9000/dubbo2
出现 consumer dubbo invoke | dubboService2|dubboService 表示服务调用成功。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。