创建3个模块: 模块说明
- dubbo-api 模块 存放消费者和生产者通用接口组+通用模块
- dubbo-provider 服务提供者 ,生产者 提供业务方法的实现
- dubbo-cosumer 服务消费者,请求服务,获取实现
搭建结构:
父模块工程pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.0.RELEASE</version>
</parent>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
1 api模块
项目结构:
UserService
public interface UserService {
public String sayHello(String name);
}
2 开发provider(生产者)模块
生产者作为服务的提供者 dubbo官方提供非常简单的注解配置: 只需要使用两个注解即可:
作用:
@Service 注解 来完成服务的发布 注意导包的时候,要导入dubbo官方提供的包。
@EnabledDubbo 在启动类上添加,自动扫描所有的服务类(有@Service注解的类) 注册到zookeeper上发布
1.创建子模块 pom导入api依赖即可
<dependencies>
<!--springboot 整合dubbo 开始 -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.5</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<version>2.7.5</version>
<type>pom</type>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--springboot 整合dubbo 结束-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
引入上述api模块坐标
<dependency>
<groupId>com.itheima.dubbo</groupId>
<artifactId>api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
2.搭建生产者工程目录
3.编写服务类: 注意使用注解 不要导错包 @Service,导的是dubbo包下的Service
//注意 : @Service注解不要导错包!!!!!
// 该注解 : 1 生成UserService接口实例对象
// 2. 提供服务类 后续会结合 @EnableDubbo注解 服务注册到zookeeper中心上
@Service
public class UserServiceImpl implements UserService {
@Override
public String sayHello(String name) {
System.out.println("----服务访问了一次------后续访问数据源");
return "hello dubbo "+name;
}
}
4.配置dubbo服务发布: 编写 application.properties文件 复制官方模板修改即可,
修改一下端口号:避免后续启动服务 端口被占用: 8088
# dubbo-provider.properties
dubbo.application.name=annotation-springboot-provider
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
dubbo.scan.base-packages=com.itheima.service
server.port=8081
确保本地zookeeper服务启动 : zkServer.cmd黑窗口打开!
5.编写启动类: 启动main方法 发布服务
@SpringBootApplication
//如果在配置文件中配置了dubbo.scan.base-packages=com.itheima.service,则不需要使用@EnableDubbo来扫描
//@EnableDubbo(scanBasePackages= "com.itheima.service.impl")// 官方提供的模板,修改扫描的包名: 自己的@Service类所在的包名
public class UserApplication {
public static void main(String[] args) {
SpringApplication.run(UserApplication.class,args);
System.out.println("---生产者服务启动-----8088");
}
}
6.打开 dubbo-admin后台管理界面 查看服务生产者有无注册!
3 开发消费者模块
同生产者开发类似:
- @Reference 获取、订阅服务
- 创建子模块,dubbo-consumer pom依赖 api即可
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--springboot 整合dubbo 开始 -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.5</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<version>2.7.5</version>
<type>pom</type>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--springboot 整合dubbo 结束-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
引入上述api模块坐标
<dependency>
<groupId>com.itheima.dubbo</groupId>
<artifactId>api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
2.编写Controller 对象 当浏览器发送请求: springmvc接受请求,调用dubbo服务
@RestController
public class UserController {
@Reference // 注解不要导错包 导入dubbo的才行 注册服务到zookeeper
private UserService userService;
@GetMapping("/hello/{name}")
public String hello(@PathVariable("name") String name){
String s = userService.sayHello(name);
return "hello"+s;
}
}
3.配置dubbo服务
编写application.properties
# dubbo-consumer.properties
dubbo.application.name=annotation-springboot-consumer
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.consumer.check=false
server.port=8088
4.启动main方法 服务消费者编写完成 查看dubbo-admin窗口
测试:
浏览器输入地址: 访问消费者 localhost:8088/hello/yuanjian