乐趣区

关于java:动力节点王妈妈Springboot教程笔记七SpringBoot集成Dubbo

第七章 SpringBoot 集成 Dubbo

官网下载地

能源节点 springboot 材料

视频观看地址

https://www.bilibili.com/vide…

7.1 看 SpringBoot 继承 Dubbo 的文档

https://github.com/apache/dub…

7.2 公共我的项目

独立的 maven 我的项目:定义了接口和数据类

public class Student implements Serializable {
    private static final long serialVersionUID = 1901229007746699151L;

    private Integer id;
    private String name;
    private Integer age;
}

public interface StudentService {Student queryStudent(Integer id);
}

7.3 提供者

创立 SpringBoot 我的项目

1)pom.xml

<dependencies>

   <!-- 退出公共我的项目的 gav-->
   <dependency>
      <groupId>com.bjpowernode</groupId>
      <artifactId>022-interface-api</artifactId>
      <version>1.0.0</version>
   </dependency>

   <!--dubbo 依赖 -->
   <dependency>
      <groupId>org.apache.dubbo</groupId>
      <artifactId>dubbo-spring-boot-starter</artifactId>
      <version>2.7.8</version>
   </dependency>


   <!--zookeeper 依赖 -->
   <dependency>
      <groupId>org.apache.dubbo</groupId>
      <artifactId>dubbo-dependencies-zookeeper</artifactId>
      <version>2.7.8</version>
      <type>pom</type>
      <exclusions>
         <!-- 排除 log4j 依赖 -->
         <exclusion>
            <artifactId>slf4j-log4j12</artifactId>
            <groupId>org.slf4j</groupId>
         </exclusion>
      </exclusions>
   </dependency>
</dependencies>

2)实现接口

/**
 * 应用 dubbo 中的注解裸露服务
 * @Component 能够不必加
 */
@DubboService(interfaceClass = StudentService.class,version = "1.0",timeout = 5000)
public class StudentServiceImpl implements StudentService {
    @Override
    public Student queryStudent(Integer id) {Student student  = new Student();
        if(1001 == id){student.setId(1001);
            student.setName("------1001- 张三");
            student.setAge(20);
        } else if(1002  == id){student.setId(1002);
            student.setName("#######1002- 李四");
            student.setAge(22);
        }

        return student;
    }
}

3)application.properties

# 配置服务名称 dubbo:application name="名称"
spring.application.name=studentservice-provider

#配置扫描的包,扫描的 @DubboService
dubbo.scan.base-packages=com.bjpowernode.service

#配置 dubbo 协定
#dubbo.protocol.name=dubbo
#dubbo.protocol.port=20881

#注册核心
dubbo.registry.address=zookeeper://localhost:2181

4)在启动类的下面

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

7.4 消费者

创立 SpringBoot 我的项目

1)pom.xml

<dependencies>

   <!-- 退出公共我的项目的 gav-->
   <dependency>
      <groupId>com.bjpowernode</groupId>
      <artifactId>022-interface-api</artifactId>
      <version>1.0.0</version>
   </dependency>

   <!--dubbo 依赖 -->
   <dependency>
      <groupId>org.apache.dubbo</groupId>
      <artifactId>dubbo-spring-boot-starter</artifactId>
      <version>2.7.8</version>
   </dependency>


   <!--zookeeper 依赖 -->
   <dependency>
      <groupId>org.apache.dubbo</groupId>
      <artifactId>dubbo-dependencies-zookeeper</artifactId>
      <version>2.7.8</version>
      <type>pom</type>
      <exclusions>
         <!-- 排除 log4j 依赖 -->
         <exclusion>
            <artifactId>slf4j-log4j12</artifactId>
            <groupId>org.slf4j</groupId>
         </exclusion>
      </exclusions>
   </dependency>
</dependencies>

2)创立了 Controller 或者 Service 都能够

@RestController
public class DubboController {

    /**
     * 援用近程服务,把创立好的代理对象,注入给 studentService
     */
    //@DubboReference(interfaceClass = StudentService.class,version = "1.0")

    /**
     * 没有应用 interfaceClass,默认的就是 援用类型的 数据类型
      */
    @DubboReference(version = "1.0")
    private StudentService studentService;

    @GetMapping("/query")
    public String queryStudent(Integer id){Student student   = studentService.queryStudent(id);
        return "调用近程接口,获取对象:"+student;
    }
}

3)application.properties


#指定服务名称
spring.application.name=consumer-application
#指定注册核心
dubbo.registry.address=zookeeper://localhost:2181

7.5 练习

应用的技术:SpringBoot ,Dubbo, Redis, MyBatis

Student 表:

CREATE TABLE student (id int(11) NOT NULL AUTO_INCREMENT,
name varchar(255) COLLATE utf8_bin DEFAULT NULL,
phone varchar(11) COLLATE utf8_bin DEFAULT NULL,
age int(11) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

1)注册学生

  • phone 必须惟一,如果曾经存在了手机号,注册失败的。
  • int addStudent(Student student);
  • 返回值:int
  • 1:注册胜利
  • 2:手机号曾经存在
  • name 至多两个字符,
  • age 必须 大于 0

2)查问学生,依据 id 查问,此学生。

  • 先到 redis 查问学生,如果 redis 没有此学生,从数据库查问,把查问到的学生放入到 redis
  • 前面再次查问这个学生应该从 redis 就能获取到。
  • Student queryStudent(Integer id);

3)应用 Dubbo 框架,addStudent, queryStudent 是有服务提供者实现的。

  • 消费者能够是一个 Controller,调用提供者的两个办法。实现注册和查问。

4)页面应用 html 和 ajax,jquery。

  • 在 html 页面中提供 form 注册学生,提供文本框输出 id,进行查问。
  • 注册和查问都应用 ajax 技术。
  • html,jquery.js 都放到 resources/static 目录中
退出移动版