spring boot2.0和以前的1.5及往前的整合方式是万全不一样的,命名、依赖jar包、书写方式都发生了改变。
集成Dubbo的前提是需要使用Zookeeper注册中心,安装教程
Dubbo支持的协议
Dubbo支持Dubbo、rmi、 hessian、 http、webservice、 thrift、 redis等多种协议,但是Dubbo官网是推荐我们使用Dubbo协议的。
Maven的三种类型
jar: 打成jar包
pom:依赖被被人继承的 公共依赖 字符模块
war:达成一个web项目 里面包含jar包、WEB-INF
Dubbo目录结构
1wxw-dubbo-parent //pom类型 公共的依赖信息
1.2wxw-dubbo-public-api-service //pom类型 提供会员接口 jar类型 pom项目没有Java代码的哦
1.2.1wxw-dubbo-public-api-member-service //jar类型
1.3wxw-dubbo-api-member-service-impl //jar类型 会员接口实现类(这个不是公开的) (点击parent创建的,需要引入 实现的interface )
1.4wxw-dubbo-order-web //jar(springboot) 订单项目 调用会员项目 ps:订单调用会员时候 引入公共接口 底层调用dubbo协议 帮助实现 *(dubbo原理 拿到类的class的地址信息,反射。)
创建Dubbo生产者会员服务
- 先创建Maven项目pom类型:wxw-dubbo-parent
在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>
<groupId>com.wxw</groupId>
<artifactId>wxw-dubbo-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>wxw-dubbo-parent</name>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.1.RELEASE</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<curator-framework.version>4.0.1</curator-framework.version>
<zookeeper.version>3.4.13</zookeeper.version>
<dubbo.starter.version>0.2.0</dubbo.starter.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>${dubbo.starter.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
//这是它的子模块
<modules>
<module>wxw-dubbo-public-api-service</module>
<module>wxw-dubbo-api-member-service-impl</module>
<module>wxw-dubbo-order-web</module>
</modules>
</project>
PS:如果需要写版本号的 springboot没有帮你整合 如果不需要写版本号 已经帮忙整合了
2. 在parent 下创建Maven项目pom类型:wxw-dubbo-public-api-service
3. 在wxw-dubbo-public-api-service下创建Maven项目jar类型:wxw-dubbo-public-api-member-service(写接口 interface)
package com.wxw.api.member.service;
public interface MemberService {
//会员接口
public String getUser();
}
- 在parent下创建Maven项目jar类型:wxw-dubbo-api-member-service-impl并且 引入: wxw-dubbo-public-api-member-service,实现它。
引入: wxw-dubbo-public-api-member-service
<dependencies>
<dependency>
<groupId>com.wxw</groupId>
<artifactId>wxw-dubbo-public-api-member-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
写核心配置文件application.properties
#服务器接口
server.port=8084
#dubbo名字
dubbo.application.name=member
#采用的协议
dubbo.protocol.name=dubbo
#采用的发布端口号
dubbo.protocol.port=20884
#dubbo注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
写实现类:
package com.wxw.api.member.service.impl;
import org.springframework.beans.factory.annotation.Value;
import com.alibaba.dubbo.config.annotation.Service;
import com.wxw.api.member.service.MemberService;
@Service // 注意:此处采用的是Dubbo的注解,而不是Spring的注解。
public class MemberServiceImpl implements MemberService {
@Value("${dubbo.protocol.port}")
private String dubboport;
@Override
public String getUser() {
System.out.println("订单服务调用会员服务,Dubbo端口号为" + dubboport);
return "订单服务调用会员服务成功,Dubbo端口号为" + dubboport;
}
}
写启动类
package com.wxw.api.member.service.impl;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
@EnableDubbo // 表示开启Dubbo,此注解必须写
@SpringBootApplication
public class AppMember {
public static void main(String[] args) {
SpringApplication.run(AppMember.class, args);
}
}
发布生产者会员服务
这里需要使用Zookeeper数据查看工具ZooInspector
下载教程
运行启动类:AppMember.java
效果图,证明Dubbo服务运行成功
创建订单服务调用会员服务
- 在parent 下创建Maven项目jar类型:wxw-dubbo-order-web,然后引入接口依赖!(wxw-dubbo-public-api-member-service)
- 创建Controller类
package wxw.order.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.alibaba.dubbo.config.annotation.Reference;
import com.wxw.api.member.service.MemberService;
@RestController
public class OrderController {
@Reference // 使用dubbo提供的@Reference,而不是@Autowired
private MemberService memberService;
@RequestMapping("/orde")
public String orderToMember() {
return memberService.getUser();
}
}
- 创建启动类
package wxw.order.controller;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
@EnableDubbo
@SpringBootApplication
public class AppOrder {
public static void main(String[] args) {
SpringApplication.run(AppOrder.class, args);
}
}
- 创建核心配置文件
#服务器接口
server.port=8082
#dubbo名字
dubbo.application.name=order
#dubbo注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
#调用服务时间
dubbo.consumer.timeout=5000
- 运行启动类并访问
效果图
注意:必须先运行生产者会员服务,才可以调用生产者会员服务。
大家可以多启动几个 发布服务端口 然后 玩玩 就集群效果 我就不做展示了