在上一篇博客《初识微服务框架——Dubbo》中提到Dubbo组件之间调用的关系,有4个重要的组件,提供者(Provider)、消费者(Consumer)、注册中心(Zookeeper)和服务监控(Monitor),注册中心、服务监控不需要我们去创建,dubbo自身提供的,我们要做的就是创建一个提供者项目和消费者项目。
第一步: 在cmd上打开dubbo服务以及admin可视化管理程序。 第二步: 我们可以把公共的代码部分(比如实体类、接口)写到一个maven项目中,然后打成jar包。
package cn.dubbo.pojo;
import java.io.Serializable;
/** * 实体类一定要实现Serializable接口,表示这个类是可被序列化的 */
public class User implements Serializable {
private Integer id;
private String name;
private Integer age;
}
package cn.dubbo.service;
import cn.dubbo.pojo.User;
import java.util.List;
/** * 用户服务的接口 */
public interface UserService {
/** * 获取所有的用户信息 * @return */
List<User> getUserList();
}
第三步:创建提供者项目
1,创建一个SpringBoot项目,选择web依赖。
2,导入相关的依赖
<!-- 加入dubbo依赖-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
</dependency>
<!-- 加入zookeeper客户端依赖-->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>2.8.0</version>
<!-- 排除-->
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 刚刚自己打的jar包-->
<dependency>
<groupId>cn.mall</groupId>
<artifactId>mall-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
3,编写application.yml配置文件
server:
port: 8081
dubbo:
application:
name: dubbo-user-provider #暴露在注册中心上接口的名字
registry:
address: zookeeper://127.0.0.1:2181 #注册中心的地址
4,编写实体类以及需要在注册中心中暴露的接口
package cn.dubbo.service;
import cn.dubbo.pojo.User;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
/** * 编写暴露在外面的接口 */
@Service //这里导包的时候要看好,是dubbo包下的,不是Spring包下的
@Component //表示交给spring托管,是一个组件
public class UserServiceImpl implements UserService{
/** * 获取所有的用户信息 * * @return */
@Override
public List<User> getUserList() {
List<User> list = new ArrayList<>();
list.add(new User(1,"梦梦",20));
list.add(new User(2,"mengmeng",20));
return list;
}
}
5,在启动类上加上@EnableDubbo注解
6,启动项目,然后浏览器里打开可视化管理工具并且刷新,这是就会看到提供者这里多了一行数据,点击ip之后,会显示暴露的接口的相关信息。
第三步:创建消费者项目
1,创建一个springboot项目,并且导入web依赖。 2,导入依赖。跟上面的依赖一样。
3,编写配置文件
server:
port: 8082
dubbo:
application:
name: dubbo-order-consumer #暴露在注册中心上接口的名字
registry:
address: zookeeper://127.0.0.1:2181 #注册中心的地址
4,编写订阅注册中心提供者暴露的接口的代码
package cn.dubbo.service;
import cn.mall.pojo.User;
import cn.mall.service.UserService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Service;
import java.util.List;
@Service //这里是spring的注解,就是一个业务层代码
public class OrderServiceImpl implements OrderService {
//调用远程的UserService的实现类
@Reference
private UserService userService;
@Override
public List<User> getUserList(Integer id) {
return userService.getUserList();
}
}
5,编写controller测试
package cn.dubbo;
import cn.dubbo.service.OrderService;
import cn.mall.pojo.User;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
@RestController
public class UserController {
@Resource
private OrderService orderService;
@RequestMapping("/getUser/{id}")
public List<User> getUserList(@PathVariable("id") Integer id){
return orderService.getUserList(id);
}
}
6,在启动类上加入@EnableDubbo注解
7,启动项目,此时会发现消费者也会出现一行数据,点开是消费者远程调用提供者暴露接口的信息。
当然,也可以在浏览器中输入项目的路径,测试一个controller是否有返回值 此时,我们的第一个基础的dubbo项目就已经创建好了,通过上面能够看到服务的调用者与消费者之间是通过RPC来通信的。