2.dubbo测试
接着昨天的写~
2.监控中心
先把zookeeper启动起来呀呼嘿
监控中心不安装的话不影响后期操作 ,但是监控中心可以帮助我们通过可视化的界面来管理和维护众多的服务,很直观的看到服务的各个情况
地址: https://github.com/apache/incubator-dubbo
下载解压:
maven编译:
等待等待 等待 …
可以看到编译成功 如果不成功可能是因为网络呀一些问题 重新来一次就好了
现在jar包已经到了D:\soft\dubbo\incubator-dubbo-admin-develop\dubbo-admin-distribution\target 文件夹下
启动zookeeper!!! 记得呀
启动admin :
启动的时候我遇到过错误 大致意思就是zookeeper连接不上 不知道是不是zookeeper的问题 重新启动一下zookeeper 再接着启动dubboadmin 就好了 ~~
访问:http://127.0.0.1:8080 没有用户名密码 奇怪了 为什么没有呢~
3.demo编写
开始编写hello-world了 不容易呀 这里编写一个服务提供者提供收货地址 服务消费者呢 就从提供者中获取地址
- 创建服务提供者
- 创建包 com.test.mall
- 创建bean类 用户地址
package com.test.mall.bean;
import java.io.Serializable;
/**
* 用户地址
*
*/
public class UserAddress implements Serializable {
private Integer id;
private String userAddress; //用户地址
private String userId; //用户id
private String consignee; //收货人
private String phoneNum; //电话号码
private String isDefault; //是否为默认地址 Y-是 N-否
public UserAddress() {
super();
// TODO Auto-generated constructor stub
}
public UserAddress(Integer id, String userAddress, String userId, String consignee, String phoneNum,
String isDefault) {
super();
this.id = id;
this.userAddress = userAddress;
this.userId = userId;
this.consignee = consignee;
this.phoneNum = phoneNum;
this.isDefault = isDefault;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserAddress() {
return userAddress;
}
public void setUserAddress(String userAddress) {
this.userAddress = userAddress;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getConsignee() {
return consignee;
}
public void setConsignee(String consignee) {
this.consignee = consignee;
}
public String getPhoneNum() {
return phoneNum;
}
public void setPhoneNum(String phoneNum) {
this.phoneNum = phoneNum;
}
public String getIsDefault() {
return isDefault;
}
public void setIsDefault(String isDefault) {
this.isDefault = isDefault;
}
}
- 编写服务方法 service
接口:
package com.test.mall.service;
import java.util.List;
import com.test.mall.bean.UserAddress;
/**
* 用户服务
*
*/
public interface UserService {
/**
* 按照用户id返回所有的收货地址
* @param userId
* @return
*/
public List<UserAddress> getUserAddressList(String userId);
}
实现:
package com.test.mall.service.impl;
import java.util.Arrays;
import java.util.List;
import com.test.mall.bean.UserAddress;
import com.test.mall.service.UserService;
/**
* 接口的实现类 负责提供所需数据
* @author LM
*
*/
public class UserServiceImpl implements UserService {
public List<UserAddress> getUserAddressList(String userId) {
UserAddress address1 = new UserAddress(1, "沙河高教園", "1", "李老师", "010-88888888", "Y");
UserAddress address2 = new UserAddress(2, "沙河", "1", "王老师", "010-66666666", "N");
return Arrays.asList(address1,address2);
}
}
- 服务消费者
- provider的接口和javabean 复制到consumer项目中
consumer项目创建订单接口和实现类
接口:
package com.test.mall.service;
public interface OrderService {
/**
* 初始化订单
* @param userId
*/
public void initOrder(String userId);
}
实现:
package com.test.mall.service.impl;
import java.util.List;
import com.test.mall.bean.UserAddress;
import com.test.mall.service.OrderService;
import com.test.mall.service.UserService;
/**
*
*/
public class OrderServiceImpl implements OrderService {
UserService userService;
public void initOrder(String userId) {
//查询用户收货地址
//这个肯定是不能用的现在
List<UserAddress> addList = userService.getUserAddressList(userId);
System.out.println(addList);
}
}
这个接口跟实现 其实只是一个初期效果 userService肯定是不能直接使用的 因为他的实现在provider项目中
-
这里先优化一下代码 可以看到userService 和 UserAddress两个类 在两个项目中都有使用 甚至在更多项目中都会被使用 所以dubbo建议大家把这些公共的接口和实体类封装成一个单独的类 供调用
-
新建公共类工程
-
将之前的javabean和userService接口 复制到common工程中
-
删除掉provider工程 和 consumer工程的bean和userService 因为不需要了 直接引入common就行了
-
consumer 和 provider都需要引入common pom.xml修改 2个项目的pom.xml都需要添加这个
<dependencies>
<dependency>
<!--common的pom.xml 开头就是这个配置 直接复制过来groupId artifactId version -->
<groupId>com.test.mall</groupId>
<artifactId>mall-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
-
将服务者provider注册到注册中心 让服务消费者consumer去注册中心订阅服务提供者provider的地址
1)导入依赖<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.test.mall</groupId> <artifactId>user-service-consumer</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <!--common的pom.xml 开头就是这个配置 直接复制过来groupId artifactId version --> <groupId>com.test.mall</groupId> <artifactId>mall-common</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> <!-- https://mvnrepository.com/artifact/com.alibaba/dubbo --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.6.2</version> </dependency> </dependencies> </project>
2 ) 注册中心使用的是zookeeper 所以需要引入操作zookeeper的客户端<!-- https://mvnrepository.com/artifact/org.apache.curator/curator-framework --> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>2.12.0</version> </dependency>
3 )配置dubbo
http://dubbo.apache.org/zh-cn/docs/user/quick-start.html
困了 准备睡了 明天继续