赞
踩
目录
SpringBootDubboConsumerApplication
SpringBootDubboProviderApplication
不恰当的比喻Provider(购房者)、Container(中介手机号)、Registry(中介)、Consumer(卖房者)、Monitor(房产局)
Container启动,Provider 注册地址到注册中心,Consumer 从注册中心异步读取和订阅 Provider 地址列表,当Provider服务下单或宕机时,Registry也会异步通知Consumer,当Consumer消费服务时,使用Registry订阅的地址访问访问Provider,Consumer、Provider同时会向Monitor异步传输调用信息。
- |-- spring-boot-dubbo (父级工程)
- |-- spring-boot-dubbo-base (基础工程)
- |-- spring-boot-dubbo-consumer (消费者)
- |-- spring-boot-dubbo-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>
- <parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>2.5.4</version>
- <relativePath/> <!-- lookup parent from repository -->
- </parent>
- <groupId>com.example</groupId>
- <artifactId>spring-boot-dubbo-base</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <name>spring-boot-dubbo-base</name>
- <description>Demo project for Spring Boot</description>
- <properties>
- <java.version>1.8</java.version>
- <spring-cloud.version>2020.0.3</spring-cloud.version>
- </properties>
- <dependencies>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.projectlombok</groupId>
- <artifactId>lombok</artifactId>
- <optional>true</optional>
- </dependency>
-
- </dependencies>
- <dependencyManagement>
- <dependencies>
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-dependencies</artifactId>
- <version>${spring-cloud.version}</version>
- <type>pom</type>
- <scope>import</scope>
- </dependency>
- </dependencies>
- </dependencyManagement>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- </plugin>
- </plugins>
- </build>
-
- </project>

User由于需要网络传输,必须实现序列化
- package com.example.base.model;
-
- import lombok.Builder;
- import lombok.Data;
- import java.io.Serializable;
-
- @Data
- @Builder
- public class User implements Serializable {
- private Integer id;
- private String name;
- }
- package com.example.base.service;
-
- import com.example.base.model.User;
-
- public interface UserService {
-
- //查询用户
- User findById(Integer id);
- }
- <?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>
- <parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>2.5.4</version>
- <relativePath/> <!-- lookup parent from repository -->
- </parent>
- <groupId>com.example</groupId>
- <artifactId>spring-boot-dubbo-consumer</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <name>spring-boot-dubbo-consumer</name>
- <description>Demo project for Spring Boot</description>
- <properties>
- <java.version>1.8</java.version>
- <spring-cloud.version>2020.0.3</spring-cloud.version>
- </properties>
- <dependencies>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.projectlombok</groupId>
- <artifactId>lombok</artifactId>
- <optional>true</optional>
- </dependency>
-
- <!--nacos-->
- <dependency>
- <groupId>com.alibaba.cloud</groupId>
- <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
- <version>2.1.1.RELEASE</version>
- </dependency>
-
-
- <!--继承api-->
- <dependency>
- <groupId>com.example</groupId>
- <artifactId>spring-boot-dubbo-base</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- </dependency>
-
- <dependency>
- <groupId>org.apache.dubbo</groupId>
- <artifactId>dubbo-spring-boot-starter</artifactId>
- <version>2.7.5</version>
- <exclusions>
- <exclusion>
- <artifactId>org.apache.dubbo</artifactId>
- <groupId>dubbo</groupId>
- </exclusion>
- </exclusions>
- </dependency>
-
- <dependency>
- <groupId>org.apache.dubbo</groupId>
- <artifactId>dubbo</artifactId>
- <version>2.7.5</version>
- </dependency>
-
-
- </dependencies>
- <dependencyManagement>
- <dependencies>
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-dependencies</artifactId>
- <version>${spring-cloud.version}</version>
- <type>pom</type>
- <scope>import</scope>
- </dependency>
- </dependencies>
- </dependencyManagement>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- </plugin>
- </plugins>
- </build>
-
- </project>

- server:
- port: 9012
- dubbo:
- # 配置服务信息
- application:
- name: dubbo-consumer
- # 禁用QOS同一台机器可能会有端口冲突现象
- qos-enable: false
- qos-accept-foreign-ip: false
- # 配置注册中心
- registry:
- address: nacos://192.168.14.1:8848
@EnableDubbo不能少
- package com.example.consumer;
-
- import org.apache.dubbo.config.spring.context.annotation.DubboComponentScan;
- import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
- import org.springframework.boot.SpringApplication;
- import org.springframework.boot.autoconfigure.SpringBootApplication;
-
- @SpringBootApplication
- @EnableDubbo //开启dubbo的注解支持
- public class SpringBootDubboConsumerApplication {
-
- public static void main(String[] args) {
- SpringApplication.run(SpringBootDubboConsumerApplication.class, args);
- }
-
- }

- package com.example.consumer.controller;
-
- import com.example.base.model.User;
- import com.example.base.service.UserService;
- import org.apache.dubbo.config.annotation.Reference;
- import org.springframework.web.bind.annotation.GetMapping;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;
-
- @RestController
- @RequestMapping
- public class UserController {
-
- // @Reference(version = "1.0.0",group = "UserGroup",interfaceClass = UserService.class)
- @Reference(check=false)
- UserService userService;
-
- @GetMapping("/user")
- public User getUser(){
- User user = userService.findById(1);
- return user;
- }
- }

- <?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>
- <parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>2.5.4</version>
- <relativePath/> <!-- lookup parent from repository -->
- </parent>
- <groupId>com.example</groupId>
- <artifactId>spring-boot-dubbo-provider</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <name>spring-boot-dubbo-provider</name>
- <description>Demo project for Spring Boot</description>
- <properties>
- <java.version>1.8</java.version>
- <spring-cloud.version>2020.0.3</spring-cloud.version>
- </properties>
- <dependencies>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
-
- <!--nacos-->
- <dependency>
- <groupId>com.alibaba.cloud</groupId>
- <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
- <version>2.1.1.RELEASE</version>
- </dependency>
-
- <dependency>
- <groupId>org.projectlombok</groupId>
- <artifactId>lombok</artifactId>
- <optional>true</optional>
- </dependency>
-
- <!--继承api-->
- <dependency>
- <groupId>com.example</groupId>
- <artifactId>spring-boot-dubbo-base</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- </dependency>
-
- <!-- Dubbo依赖 -->
- <dependency>
- <groupId>org.apache.dubbo</groupId>
- <artifactId>dubbo-spring-boot-starter</artifactId>
- <version>2.7.5</version>
- <exclusions>
- <exclusion>
- <artifactId>org.apache.dubbo</artifactId>
- <groupId>dubbo</groupId>
- </exclusion>
- </exclusions>
- </dependency>
-
- <dependency>
- <groupId>org.apache.dubbo</groupId>
- <artifactId>dubbo</artifactId>
- <version>2.7.5</version>
- </dependency>
-
-
- </dependencies>
- <dependencyManagement>
- <dependencies>
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-dependencies</artifactId>
- <version>${spring-cloud.version}</version>
- <type>pom</type>
- <scope>import</scope>
- </dependency>
- </dependencies>
- </dependencyManagement>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- </plugin>
- </plugins>
- </build>
-
- </project>

注:此处的@Service是dubbo的,不能选错
- package com.example.provider.serviceImpl;
-
- import com.example.base.model.User;
- import com.example.base.service.UserService;
- import org.apache.dubbo.config.annotation.Service;
-
- //@Service(version = "1.0.0",group = "UserGroup",interfaceClass = UserService.class)
- @Service
- public class UserServiceImpl implements UserService {
-
- @Override
- public User findById(Integer id) {
- User user = User.builder()
- .id(1)
- .name("向先生")
- .build();
- return user;
- }
-
- }

注:不能少@EnableDubbo //开启Dubbo的注解支持
- package com.example.provider;
-
- import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
- import org.springframework.boot.SpringApplication;
- import org.springframework.boot.autoconfigure.SpringBootApplication;
-
- @EnableDubbo //开启Dubbo的注解支持
- @SpringBootApplication
- public class SpringBootDubboProviderApplication {
-
- public static void main(String[] args) {
- SpringApplication.run(SpringBootDubboProviderApplication.class, args);
- }
-
- }
- server:
- port: 9011
- dubbo:
- # 配置服务信息
- application:
- name: dubbo-consumer
- # 禁用QOS同一台机器可能会有端口冲突现象
- qos-enable: false
- qos-accept-foreign-ip: false
- # 配置注册中心
- registry:
- address: nacos://192.168.14.1:8848
结果
{"id":1,"name":"向先生"}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。