前言
本章讲解SpringBoot整合Dubbo的相关知识
方法
1.概念
我们知道,在之前的学习中,我们仅仅采用了普通的Java工程结合Spring编写了Dubbo的Provider和Consumer。
由于Provider需要单独的部署,那么以前的思维是使用Assembly插件,但是由于近年来SpringBoot出色的能力,我们决定使用SpringBoot来开发我们的Provider和Consumer。
2.SpringBoot开发Provider
1)创建Provider工程
2)修改pom文件,引入必要的依赖
<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 http://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.1.7.RELEASE</version>
</parent>
<groupId>cn.edu.ccut</groupId>
<artifactId>springboot-dubbo-provider</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<!-- 设定Java的版本 -->
<java.version>1.8</java.version>
<!-- 解决pom.xml首行报错 -->
<maven-jar-plugin.version>3.1.0</maven-jar-plugin.version>
</properties>
<dependencies>
<!-- SpringBoot启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- 引入接口项目依赖,必须 -->
<dependency>
<groupId>cn.edu.ccut</groupId>
<artifactId>dubbo-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!-- 引入dubbo相关的启动器 -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
</dependency>
<!-- 引入zookeeper框架Curator相关jar坐标 -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.1.0</version>
<exclusions>
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.9</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.1.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>cn.edu.ccut.ProviderApp</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>
3)配置application.properties
## application.properties
# Spring boot application
spring.application.name=dubbo-springboot-provider
# Base packages to scan Dubbo Component: @com.alibaba.dubbo.config.annotation.Service
dubbo.scan.base-packages=cn.edu.ccut.dubbo
# Dubbo Application
## The default value of dubbo.application.name is ${spring.application.name}
## dubbo.application.name=${spring.application.name}
# Dubbo Protocol
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
## Dubbo Registry
dubbo.registry.address=zookeeper://192.168.1.106:2181
dubbo.metadata-report.address=zookeeper://192.168.1.106:2181
## DemoService version
demo.service.version=1.0.0
4)编写service实现类
package cn.edu.ccut.dubbo;
import org.apache.dubbo.config.annotation.Service;
import cn.edu.ccut.dubbo.DemoService;
@Service
public class DemoServiceImpl implements DemoService {
@Override
public String getString(String str) {
// TODO Auto-generated method stub
return "指定的字符串为:"+str;
}
}
5)启动类信息
package cn.edu.ccut;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ProviderApp {
public static void main(String[] args) {
SpringApplication.run(ProviderApp.class, args);
}
}
启动项目,观察效果:
注意:确保zookeeper正常打开!
出现上面的信息表示Provider正常启动!
3.SpringBoot开发Consumer
1)创建Consumer工程
2)修改pom文件,加入相关的jar坐标
<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 http://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.1.7.RELEASE</version>
</parent>
<groupId>cn.edu.ccut</groupId>
<artifactId>springboot-dubbo-consumer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<!-- 设定Java的版本 -->
<java.version>1.8</java.version>
<!-- 解决pom.xml首行报错 -->
<maven-jar-plugin.version>3.1.0</maven-jar-plugin.version>
</properties>
<dependencies>
<!-- SpringBoot web启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 配置Thymeleaf启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!-- 引入接口项目依赖,必须 -->
<dependency>
<groupId>cn.edu.ccut</groupId>
<artifactId>dubbo-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!-- 引入dubbo相关的启动器 -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
</dependency>
<!-- 引入zookeeper框架Curator相关jar坐标 -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.1.0</version>
<exclusions>
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.9</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.1.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>cn.edu.ccut.ConsumerApp</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>
3)配置application.properties
server.port=8888
## application.properties
# Spring boot application
spring.application.name=dubbo-springboot-consumer
# Base packages to scan Dubbo Component: @com.alibaba.dubbo.config.annotation.Service
dubbo.scan.base-packages=cn.edu.ccut.dubbo
# Dubbo Application
## The default value of dubbo.application.name is ${spring.application.name}
## dubbo.application.name=${spring.application.name}
# Dubbo Protocol
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
## Dubbo Registry
dubbo.registry.address=zookeeper://192.168.1.106:2181
dubbo.metadata-report.address=zookeeper://192.168.1.106:2181
4)编写Controller及其方法
package cn.edu.ccut.controller;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import cn.edu.ccut.dubbo.DemoService;
@Controller
public class DemoController {
@Reference
private DemoService demoService;
@RequestMapping("/show")
public String showPage(Model model){
String msg = demoService.getString("啦啦啦");
model.addAttribute("msg", msg);
return "index";
}
}
5)编写前台页面,使用Thymeleaf
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Dubbo</title>
</head>
<body>
<span th:text="${msg}"></span>
</body>
</html>
6)启动类信息
package cn.edu.ccut;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ConsumerApp {
public static void main(String[] args) {
SpringApplication.run(ConsumerApp.class, args);
}
}
启动项目,访问http://localhost:8888/show,观察效果: