目录
1.说明
dubbo官网:https://cn.dubbo.apache.org/zh-cn/
Apache Dubbo 是一款 RPC 服务开发框架,用于解决微服务架构下的服务治理与通信问题,支持多种语言,官方提供了 Java、Golang 等多语言 SDK 实现。使用 Dubbo 开发的微服务原生具备相互之间的远程地址发现与通信能力, 利用 Dubbo 提供的丰富服务治理特性,可以实现诸如服务发现、负载均衡、流量调度等服务治理诉求。Dubbo 被设计为高度可扩展,用户可以方便的实现流量拦截、选址的各种定制逻辑。
2.示例
实现说明:
创建一个空项目,在空项目中创建3个模块,分别定义接口工程,生产者工程及消费者工程。并在生产者工程及消费者工程中引入接口工程。
接口工程存放表的实体类及服务接口。
生产者工程提供服务接口的实现。
消费者工程调用服务接口。
实现步骤:
①引入dubbo依赖
<!-- Dubbo Spring Boot Starter -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.8</version>
</dependency>
<dependency><!--zookerper版本一定要匹配! -->
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-zookeeper</artifactId>
<version>2.7.8</version>
</dependency>
②在接口工程中创建接口
package com.example.service;
public interface PrivoderService {
String getInfo();
}
③在生产者工程中实现接口,并进行dubbo的配置
接口实现:使用dbboservice注解,将服务的实现暴露给dubbo
package com.example.provider.service.impl;
import com.example.service.PrivoderService;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.stereotype.Service;
/**
* @Author linaibo
* @Date 2023/11/18 15:28
* @Version 1.0
*/
@Service
@DubboService
public class PrividerServiceImpl implements PrivoderService {
@Override
public String getInfo() {
return "执行成功";
}
}
配置文件:
server:
port: 8881
dubbo:
application:
name: provider-service //dubbo的应用名
registry:
protocol: zookeeper //使用zookeeper作为服务的注册中心
address: 127.0.0.1:2181 //zookeeper地址
protocol:
name: dubbo //使用dubbo协议
port: 20885
consumer:
timeout: 60000 //调用接口的超时时间
check: false //启动时不校验消费者是否已启动
spring:
datasource:
url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: 123456
mybatis:
mapper-locations: classpath*:mapper/*Mapper.xml
type-aliases-package: com.**.domain
启动类配置:添加@EnableDubbo,用于将dubbo相关的配置bean加载到spring容器
package com.example.provider;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @Author linaibo
* @Date 2023/11/18 15:32
* @Version 1.0
*/
@SpringBootApplication
@EnableDubbo
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}
④生产者工程中调用接口
调用:使用DubboReference指定调用的服务
package com.example.consumer.service.impl;
import com.example.consumer.service.ConsumerService;
import com.example.domain.AjaxResult;
import com.example.service.ISysConfigService;
import com.example.service.PrivoderService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.stereotype.Service;
import static com.example.domain.AjaxResult.success;
/**
* @Author linaibo
* @Date 2023/11/18 15:56
* @Version 1.0
*/
@Service
public class ConsumerServiceImpl implements ConsumerService {
@DubboReference
private PrivoderService privoderService;
@DubboReference
private ISysConfigService sysConfigService;
@Override
public String getInfo() {
String info = privoderService.getInfo();
return info;
}
@Override
public AjaxResult getConfig(Long configId) {
return success(sysConfigService.selectConfigById(configId));
}
}
配置文件及启动类配置和生产者工程一致
启动zookeeper服务及生产者工程及消费者工程,就可以进行服务的调用。
3.总结
可以通过dubbo-admin进行服务的管理及查看。
dubbo.consumer.timeout:调用超时时间(毫秒),默认为 1000。debug模式下会导致调用失败,所以需要调大。
dubbo.consumer.check:为true时,开启服务启动时检查依赖的服务是否可用,默认为 true。
也就是说,生产者没有启动时,消费者无法启动,需要设置为false
参照:SpringBoot整合dubbo+zooker搭建分布式服务(超详细)_springboot+dubbo分布式项目-CSDN博客