Dubbo——Day02

it2025-10-19  7

5. 监控中心-Monitor

作用:采用磁盘存储统计信息,注意安装机器的磁盘限制。集群推荐使用mount共享磁盘。但是用的比较少。

还是进入之间下载的Dubbo-admin目录下,找到dubbo-monitor-simple,文件cmd,进入执行

mvn package -Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true -Dmaven.wagon.http.ssl.ignore.validity.dates=true

打包之后,进入target目录找到dubbo-monitor-simple-2.0.0-assembly.tar.gz,把这个解压(可以复制出来,这个就是要运行的monitor了),进入assembly.bin目录下,点击start.bat运行。

需要注意的点:

需要先启动zookeeper,如果是本地启动zookeeper会有一个默认端口为8080的jetty服务器。为了避免冲突可以修改monitor中配置文件的jetty的端口。

看到这个界面说明运行成功了。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i41c3Afg-1603336965384)(D:\面向offer编程\分布式\images\Dubbo7.png)]

即使monitor挂掉也不会影响消费者和生产者的运行。

6. SpringBoot整合Dubbo

主要逻辑还是根据上面的Hello-Dubbo

6.1 依赖

阿里系连接dubbo依赖:

<!-- 阿里系dubbo开始 dubbo版本为 2.6.5--> <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>0.2.1.RELEASE</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>${dubbo.version}</version> </dependency> <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>4.1.0</version> </dependency> <!-- 阿里系dubbo结束-->

apache系连接dubbo依赖:

<!-- apache系 dubbo 开始 dubbo版本为2.7.3--> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>${dubbo.version}</version> </dependency> <!-- 使用zookeeper做注册中心,所需的依赖--> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-registry-zookeeper</artifactId> <version>${dubbo.version}</version> <type>pom</type> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency> <!-- apache 系 dubbo 结束-->

6.2 yml 配置方式

6.2.1 提供者provider:

依赖:

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.boot.provider</groupId> <artifactId>boot-provider</artifactId> <version>0.0.1-SNAPSHOT</version> <name>boot-provider</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <spring-boot.version>2.3.0.RELEASE</spring-boot.version> <dubbo.version>2.7.3</dubbo.version> </properties> <dependencies> <dependency> <groupId>org.example</groupId> <artifactId>boot-inter</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <!-- apache系 dubbo 开始 dubbo版本为2.7.3--> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>${dubbo.version}</version> </dependency> <!-- 使用zookeeper做注册中心,所需的依赖--> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-registry-zookeeper</artifactId> <version>${dubbo.version}</version> <type>pom</type> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency> <!-- apache 系 dubbo 结束--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </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> </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.boot.provider.BootProviderApplication</mainClass> </configuration> <executions> <execution> <id>repackage</id> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>

配置文件:

# 应用名称 spring: application: name: boot-provider dubbo: # dubbo注册地址 registry: address: zookeeper://localhost:2181 # dubbo 暴露协议 protocol: name: dubbo port: 20880

实现类:

// service是 org.apache.dubbo.config.annotation.Service; @Service public class UserServiceImpl implements UserService { @Override public List<UserAddress> queryAllAddress() { UserAddress userAddress = new UserAddress(1,"山东省日照市东港区","吴彦祖"); UserAddress userAddress1 = new UserAddress(2,"山东省济宁市任城区","吴亦凡"); List<UserAddress> addresses = new ArrayList<UserAddress>(); addresses.add(userAddress); addresses.add(userAddress1); System.out.println("20881"); return addresses; } }

启动类:

@SpringBootApplication // 启用dubbo @EnableDubbo public class BootProviderApplication { public static void main(String[] args) { SpringApplication.run(BootProviderApplication.class, args); } }

6.2.2 消费者

依赖:

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.boot.consumer</groupId> <artifactId>boot-consumer</artifactId> <version>0.0.1-SNAPSHOT</version> <name>boot-consumer</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <spring-boot.version>2.3.0.RELEASE</spring-boot.version> <dubbo.version>2.7.3</dubbo.version> </properties> <dependencies> <dependency> <groupId>org.example</groupId> <artifactId>boot-inter</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <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> <!-- apache系 dubbo 开始 dubbo版本为2.7.3--> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>${dubbo.version}</version> </dependency> <!-- 使用zookeeper做注册中心,所需的依赖--> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-registry-zookeeper</artifactId> <version>${dubbo.version}</version> <type>pom</type> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency> <!-- apache 系 dubbo 结束--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </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> </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.boot.consumer.BootConsumerApplication</mainClass> </configuration> <executions> <execution> <id>repackage</id> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>

实现类:

// service是:org.springframework.stereotype.Service; @Service public class OrderServiceImpl implements OrderService { // Reference 是org.apache.dubbo.config.annotation.Reference; @Reference private UserService userService; @Override public List<UserAddress> initOrder() { return userService.queryAllAddress(); } }

controller:

/** * @date 2020/10/12 19:28 */ @RestController @RequestMapping("order") public class OrderController { @Autowired private OrderService orderService; @RequestMapping("all") public List<UserAddress> all(){ return orderService.initOrder(); } }

配置文件:

# 名字 spring: application: name: boot-consumer dubbo: registry: address: zookeeper://localhost:2181

启动类:

@SpringBootApplication @EnableDubbo public class BootConsumerApplication { public static void main(String[] args) { SpringApplication.run(BootConsumerApplication.class, args); } }

访问http://localhost:8801/order/all

6.3 注解API方式

6.3.1 服务提供者

注释掉配置文件 application.properties/yml,将服务实现类上的@Service注解变成 org.springframework.stereotype.Service的注解。

新建DubboConfig:

/** * 服务提供者 * @date 2020/10/13 8:35 */ @Configuration public class DubboConfig { /** * 声明服务名称 * @return config */ @Bean public ApplicationConfig applicationConfig(){ ApplicationConfig config = new ApplicationConfig("boot-provider"); return config; } /** * 声明注册中心配置 * @return config */ @Bean public RegistryConfig registryConfig(){ RegistryConfig config = new RegistryConfig("zookeeper://localhost:2181"); return config; } /** * 声明暴露协议和端口 * @return config */ @Bean public ProtocolConfig protocolConfig(){ ProtocolConfig config = new ProtocolConfig("dubbo",20880); return config; } /** * 暴露UserServiceImpl服务 * @param userService * @param applicationConfig * @param registryConfig * @return */ @Bean public ServiceConfig<UserService> serviceConfigUserService(UserService userService, ApplicationConfig applicationConfig, RegistryConfig registryConfig){ // 声明配置器 ServiceConfig<UserService> serviceConfig = new ServiceConfig<>(); // 声明想要暴露的接口 serviceConfig.setInterface(UserService.class); // 指定暴露的接口对象 serviceConfig.setRef(userService) ; // 指定应用程序的名称 serviceConfig.setApplication(applicationConfig); // 设置注册中心 serviceConfig.setRegistry(registryConfig); // 暴露出去 serviceConfig.export(); return serviceConfig; } }

6.3.2 消费者

修改实现类:

/** * @date 2020/10/12 14:08 */ @Service public class OrderServiceImpl implements OrderService { // @Reference private UserService userService; public void setUserService(UserService userService) { this.userService = userService; } @Override public List<UserAddress> initOrder() { return userService.queryAllAddress(); } }

新增配置类

/** * 服务消费者 * @date 2020/10/13 8:35 */ @Configuration public class DubboConfig { /** * 声明服务名称 * @return config */ @Bean public ApplicationConfig applicationConfig(){ ApplicationConfig config = new ApplicationConfig("boot-consumer"); return config; } /** * 声明注册中心配置 * @return config */ @Bean public RegistryConfig registryConfig(){ RegistryConfig config = new RegistryConfig("zookeeper://localhost:2181"); return config; } /** * 引用UserServiceImpl服务 * @param orderServiceImpl * @return */ @Bean public ReferenceConfig<UserService> referenceConfig(OrderServiceImpl orderServiceImpl, ApplicationConfig applicationConfig, RegistryConfig registryConfig){ ReferenceConfig<UserService> referenceConfig = new ReferenceConfig<>(); referenceConfig.setInterface(UserService.class); referenceConfig.setId("userService"); referenceConfig.setApplication(applicationConfig); referenceConfig.setRegistry(registryConfig); // 给orderServiceImpl注入数据 orderServiceImpl.setUserService(referenceConfig.get()); return referenceConfig; } }

配置文件只留下配置的tomcat端口号(默认是8080不冲突不留下也行)。

码云地址: https://gitee.com/jminzhou/dubbo-study

7. Dubbo的配置文件加载级别

基于最初版dubbo-ego项目。

配置的-D优先级最高

其次是Spring的配置文件applicationContext.xml。

只有当xml中没有配置dubbo的端口时,自己配置的dubbo.properties中的dubbo端口才会生效。

最新回复(0)