目录
一、引入pom文件依赖:公共接口、dubbo、zookeeper
1、 加载 Spring 配置文件 consumer.xml
2、查看 dubbo-admin 管理控制台( 监控中心 )
提供者项目(user-service-provider-yyh),输出如下
消费者项目(order-service-consumer-yyh),输出如下
创建消费者
一、引入pom文件依赖:公共接口、dubbo、zookeeper
pom.xml
<!--设置依赖调用公共模块代码-->
<!--eclipse依赖方式-->
<!--<dependency>
<groupId>com.atguigu.gmall</groupId>
<artifactId>gmall-interface</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>-->
<!--IDEA依赖方式
https://blog.csdn.net/ylforever/article/details/109140991-->
<dependency>
<groupId>com.atguigu.gmall</groupId>
<artifactId>gmall-interface-yyh</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<!-- 引入dubbo -->
<!-- https://mvnrepository.com/artifact/com.alibaba/dubbo -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.6.2</version>
</dependency>
<!-- 注册中心使用的是zookeeper,引入操作zookeeper的客户端 -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.12.0</version>
</dependency>
<!-- 由于我们使用zookeeper作为注册中心,所以需要操作zookeeper
dubbo 2.6以前的版本引入zkclient操作zookeeper
dubbo 2.6及以后的版本引入curator操作zookeeper
下面两个zk客户端根据dubbo版本2选1即可
-->
二、写消费者-实现类(订单)
OrderServiceImpl.java
@Service
public class OrderServiceImpl implements OrderService {
@Autowired
UserService userService;
@Override
public List<UserAddress> initOrder(String userId) {
// TODO Auto-generated method stub
System.out.println("用户id:"+userId);
//1、查询用户的收货地址
//如果把 用户模块 项目打成jar包,直接依赖进来!
//那么这就不是分布式开发了,它是单体应用模式!
//有可能除了订单应用,其他应用也需要用户接口,总不能每个应用都写一遍代码,
//麻烦和冗余,官网也建议我们分包,把公共的放在一起。
//我们可以把用户的 bean文件和service接口 提取放在里面.
//我们引用了 UserService 接口,但是它的实现在别的工程里面,而且有可能在别的服务器上面,
//所以调 getUserAddressList 方法,我们需要远程去调用
if(!StringUtils.isEmpty(userId)) {
List<UserAddress> addressList = userService.getUserAddressList(userId);
for (UserAddress userAddress : addressList) {
System.out.println(userAddress.getUserAddress());
}
return addressList;
}
return null;
}
}
三、消费者配置:通过 spring 配置引用远程服务
consumer.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- 包扫描 -->
<context:component-scan base-package="com.atguigu.gmall.service.impl"></context:component-scan>
<!-- 1、指定当前服务/应用的名字(同样的服务名字相同,不要和别的服务同名),一般指定工程名-->
<dubbo:application name="order-service-consumer-yyh"></dubbo:application>
<!-- 2、指定注册中心的地址 -->
<dubbo:registry address="zookeeper://127.0.0.1:2181"></dubbo:registry>
<!--3、声明需要调用的远程服务的接口,生成远程服务代理 -->
<dubbo:reference interface="com.atguigu.gmall.service.UserService" id="userService" >
</dubbo:reference>
</beans>
四、测试调用演示
1、 加载 Spring 配置文件 consumer.xml
MainApplication.java
public class MainApplication {
@SuppressWarnings("resource")
public static void main(String[] args) throws IOException {
ClassPathXmlApplicationContext applicationContext =
new ClassPathXmlApplicationContext("consumer.xml");
//从容器中拿到 OrderService
OrderService orderService = applicationContext.getBean(OrderService.class);
orderService.initOrder("1");
System.out.println("调用完成....");
System.in.read();//阻塞一下
}
}