当前位置:   article > 正文

Dubbo + SpringBoot + Nacos 部署服务_dubbo nacos启动了很多服务

dubbo nacos启动了很多服务

目录

服务发现示意图

版本信息

项目结构

spring-boot-dubbo-base

pom.xml

User

UserService

spring-boot-dubbo-consumer

pom.xml

application.yml

SpringBootDubboConsumerApplication

userController

spring-boot-dubbo-provider

pom.xml

UserServiceImpl

SpringBootDubboProviderApplication

application.yml

测试


服务发现示意图

不恰当的比喻Provider(购房者)、Container(中介手机号)、Registry(中介)、Consumer(卖房者)、Monitor(房产局)

Container启动,Provider 注册地址到注册中心,Consumer 从注册中心异步读取和订阅 Provider 地址列表,当Provider服务下单或宕机时,Registry也会异步通知Consumer,当Consumer消费服务时,使用Registry订阅的地址访问访问Provider,Consumer、Provider同时会向Monitor异步传输调用信息。

版本信息

  • springboot  2.5.4
  • maven 3.3.9
  • nacos 2.0.3
  • dubbo 2.7.0

项目结构

  1. |-- spring-boot-dubbo (父级工程)
  2. |-- spring-boot-dubbo-base (基础工程)
  3. |-- spring-boot-dubbo-consumer (消费者)
  4. |-- spring-boot-dubbo-provider (生产者)

spring-boot-dubbo-base

pom.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-parent</artifactId>
  8. <version>2.5.4</version>
  9. <relativePath/> <!-- lookup parent from repository -->
  10. </parent>
  11. <groupId>com.example</groupId>
  12. <artifactId>spring-boot-dubbo-base</artifactId>
  13. <version>0.0.1-SNAPSHOT</version>
  14. <name>spring-boot-dubbo-base</name>
  15. <description>Demo project for Spring Boot</description>
  16. <properties>
  17. <java.version>1.8</java.version>
  18. <spring-cloud.version>2020.0.3</spring-cloud.version>
  19. </properties>
  20. <dependencies>
  21. <dependency>
  22. <groupId>org.springframework.boot</groupId>
  23. <artifactId>spring-boot-starter-web</artifactId>
  24. </dependency>
  25. <dependency>
  26. <groupId>org.projectlombok</groupId>
  27. <artifactId>lombok</artifactId>
  28. <optional>true</optional>
  29. </dependency>
  30. </dependencies>
  31. <dependencyManagement>
  32. <dependencies>
  33. <dependency>
  34. <groupId>org.springframework.cloud</groupId>
  35. <artifactId>spring-cloud-dependencies</artifactId>
  36. <version>${spring-cloud.version}</version>
  37. <type>pom</type>
  38. <scope>import</scope>
  39. </dependency>
  40. </dependencies>
  41. </dependencyManagement>
  42. <build>
  43. <plugins>
  44. <plugin>
  45. <groupId>org.springframework.boot</groupId>
  46. <artifactId>spring-boot-maven-plugin</artifactId>
  47. </plugin>
  48. </plugins>
  49. </build>
  50. </project>

User

User由于需要网络传输,必须实现序列化

  1. package com.example.base.model;
  2. import lombok.Builder;
  3. import lombok.Data;
  4. import java.io.Serializable;
  5. @Data
  6. @Builder
  7. public class User implements Serializable {
  8. private Integer id;
  9. private String name;
  10. }

UserService

  1. package com.example.base.service;
  2. import com.example.base.model.User;
  3. public interface UserService {
  4. //查询用户
  5. User findById(Integer id);
  6. }

spring-boot-dubbo-consumer

pom.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-parent</artifactId>
  8. <version>2.5.4</version>
  9. <relativePath/> <!-- lookup parent from repository -->
  10. </parent>
  11. <groupId>com.example</groupId>
  12. <artifactId>spring-boot-dubbo-consumer</artifactId>
  13. <version>0.0.1-SNAPSHOT</version>
  14. <name>spring-boot-dubbo-consumer</name>
  15. <description>Demo project for Spring Boot</description>
  16. <properties>
  17. <java.version>1.8</java.version>
  18. <spring-cloud.version>2020.0.3</spring-cloud.version>
  19. </properties>
  20. <dependencies>
  21. <dependency>
  22. <groupId>org.springframework.boot</groupId>
  23. <artifactId>spring-boot-starter-web</artifactId>
  24. </dependency>
  25. <dependency>
  26. <groupId>org.projectlombok</groupId>
  27. <artifactId>lombok</artifactId>
  28. <optional>true</optional>
  29. </dependency>
  30. <!--nacos-->
  31. <dependency>
  32. <groupId>com.alibaba.cloud</groupId>
  33. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  34. <version>2.1.1.RELEASE</version>
  35. </dependency>
  36. <!--继承api-->
  37. <dependency>
  38. <groupId>com.example</groupId>
  39. <artifactId>spring-boot-dubbo-base</artifactId>
  40. <version>0.0.1-SNAPSHOT</version>
  41. </dependency>
  42. <dependency>
  43. <groupId>org.apache.dubbo</groupId>
  44. <artifactId>dubbo-spring-boot-starter</artifactId>
  45. <version>2.7.5</version>
  46. <exclusions>
  47. <exclusion>
  48. <artifactId>org.apache.dubbo</artifactId>
  49. <groupId>dubbo</groupId>
  50. </exclusion>
  51. </exclusions>
  52. </dependency>
  53. <dependency>
  54. <groupId>org.apache.dubbo</groupId>
  55. <artifactId>dubbo</artifactId>
  56. <version>2.7.5</version>
  57. </dependency>
  58. </dependencies>
  59. <dependencyManagement>
  60. <dependencies>
  61. <dependency>
  62. <groupId>org.springframework.cloud</groupId>
  63. <artifactId>spring-cloud-dependencies</artifactId>
  64. <version>${spring-cloud.version}</version>
  65. <type>pom</type>
  66. <scope>import</scope>
  67. </dependency>
  68. </dependencies>
  69. </dependencyManagement>
  70. <build>
  71. <plugins>
  72. <plugin>
  73. <groupId>org.springframework.boot</groupId>
  74. <artifactId>spring-boot-maven-plugin</artifactId>
  75. </plugin>
  76. </plugins>
  77. </build>
  78. </project>

application.yml

  1. server:
  2. port: 9012
  3. dubbo:
  4. # 配置服务信息
  5. application:
  6. name: dubbo-consumer
  7. # 禁用QOS同一台机器可能会有端口冲突现象
  8. qos-enable: false
  9. qos-accept-foreign-ip: false
  10. # 配置注册中心
  11. registry:
  12. address: nacos://192.168.14.1:8848

SpringBootDubboConsumerApplication

@EnableDubbo不能少

  1. package com.example.consumer;
  2. import org.apache.dubbo.config.spring.context.annotation.DubboComponentScan;
  3. import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
  4. import org.springframework.boot.SpringApplication;
  5. import org.springframework.boot.autoconfigure.SpringBootApplication;
  6. @SpringBootApplication
  7. @EnableDubbo //开启dubbo的注解支持
  8. public class SpringBootDubboConsumerApplication {
  9. public static void main(String[] args) {
  10. SpringApplication.run(SpringBootDubboConsumerApplication.class, args);
  11. }
  12. }

userController

  • 如果提供服务者@Service拥有版本号,@Reference也必须拥有版本号,用于解决server多实现。
  • check=false可以不用验证生产者是否可用,如果使用默认true,如果生产者不可用,dubbo会阻止springboot启动
  1. package com.example.consumer.controller;
  2. import com.example.base.model.User;
  3. import com.example.base.service.UserService;
  4. import org.apache.dubbo.config.annotation.Reference;
  5. import org.springframework.web.bind.annotation.GetMapping;
  6. import org.springframework.web.bind.annotation.RequestMapping;
  7. import org.springframework.web.bind.annotation.RestController;
  8. @RestController
  9. @RequestMapping
  10. public class UserController {
  11. // @Reference(version = "1.0.0",group = "UserGroup",interfaceClass = UserService.class)
  12. @Reference(check=false)
  13. UserService userService;
  14. @GetMapping("/user")
  15. public User getUser(){
  16. User user = userService.findById(1);
  17. return user;
  18. }
  19. }

spring-boot-dubbo-provider

pom.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-parent</artifactId>
  8. <version>2.5.4</version>
  9. <relativePath/> <!-- lookup parent from repository -->
  10. </parent>
  11. <groupId>com.example</groupId>
  12. <artifactId>spring-boot-dubbo-provider</artifactId>
  13. <version>0.0.1-SNAPSHOT</version>
  14. <name>spring-boot-dubbo-provider</name>
  15. <description>Demo project for Spring Boot</description>
  16. <properties>
  17. <java.version>1.8</java.version>
  18. <spring-cloud.version>2020.0.3</spring-cloud.version>
  19. </properties>
  20. <dependencies>
  21. <dependency>
  22. <groupId>org.springframework.boot</groupId>
  23. <artifactId>spring-boot-starter-web</artifactId>
  24. </dependency>
  25. <!--nacos-->
  26. <dependency>
  27. <groupId>com.alibaba.cloud</groupId>
  28. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  29. <version>2.1.1.RELEASE</version>
  30. </dependency>
  31. <dependency>
  32. <groupId>org.projectlombok</groupId>
  33. <artifactId>lombok</artifactId>
  34. <optional>true</optional>
  35. </dependency>
  36. <!--继承api-->
  37. <dependency>
  38. <groupId>com.example</groupId>
  39. <artifactId>spring-boot-dubbo-base</artifactId>
  40. <version>0.0.1-SNAPSHOT</version>
  41. </dependency>
  42. <!-- Dubbo依赖 -->
  43. <dependency>
  44. <groupId>org.apache.dubbo</groupId>
  45. <artifactId>dubbo-spring-boot-starter</artifactId>
  46. <version>2.7.5</version>
  47. <exclusions>
  48. <exclusion>
  49. <artifactId>org.apache.dubbo</artifactId>
  50. <groupId>dubbo</groupId>
  51. </exclusion>
  52. </exclusions>
  53. </dependency>
  54. <dependency>
  55. <groupId>org.apache.dubbo</groupId>
  56. <artifactId>dubbo</artifactId>
  57. <version>2.7.5</version>
  58. </dependency>
  59. </dependencies>
  60. <dependencyManagement>
  61. <dependencies>
  62. <dependency>
  63. <groupId>org.springframework.cloud</groupId>
  64. <artifactId>spring-cloud-dependencies</artifactId>
  65. <version>${spring-cloud.version}</version>
  66. <type>pom</type>
  67. <scope>import</scope>
  68. </dependency>
  69. </dependencies>
  70. </dependencyManagement>
  71. <build>
  72. <plugins>
  73. <plugin>
  74. <groupId>org.springframework.boot</groupId>
  75. <artifactId>spring-boot-maven-plugin</artifactId>
  76. </plugin>
  77. </plugins>
  78. </build>
  79. </project>

UserServiceImpl

注:此处的@Service是dubbo的,不能选错

  1. package com.example.provider.serviceImpl;
  2. import com.example.base.model.User;
  3. import com.example.base.service.UserService;
  4. import org.apache.dubbo.config.annotation.Service;
  5. //@Service(version = "1.0.0",group = "UserGroup",interfaceClass = UserService.class)
  6. @Service
  7. public class UserServiceImpl implements UserService {
  8. @Override
  9. public User findById(Integer id) {
  10. User user = User.builder()
  11. .id(1)
  12. .name("向先生")
  13. .build();
  14. return user;
  15. }
  16. }

SpringBootDubboProviderApplication

注:不能少@EnableDubbo //开启Dubbo的注解支持

  1. package com.example.provider;
  2. import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
  3. import org.springframework.boot.SpringApplication;
  4. import org.springframework.boot.autoconfigure.SpringBootApplication;
  5. @EnableDubbo //开启Dubbo的注解支持
  6. @SpringBootApplication
  7. public class SpringBootDubboProviderApplication {
  8. public static void main(String[] args) {
  9. SpringApplication.run(SpringBootDubboProviderApplication.class, args);
  10. }
  11. }

application.yml

  1. server:
  2. port: 9011
  3. dubbo:
  4. # 配置服务信息
  5. application:
  6. name: dubbo-consumer
  7. # 禁用QOS同一台机器可能会有端口冲突现象
  8. qos-enable: false
  9. qos-accept-foreign-ip: false
  10. # 配置注册中心
  11. registry:
  12. address: nacos://192.168.14.1:8848

测试

 http://localhost:9012/user

结果

{"id":1,"name":"向先生"}

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/774001
推荐阅读
相关标签
  

闽ICP备14008679号