dubbo的入门学习(二)

dubbo的入门学习(二)

需求:
某个电商系统,订单服务需要调用用户服务获取某个用户的所有地址;
我们现在 需要创建两个服务模块进行测试

模块功能
订单服务web模块创建订单等
用户服务service模块查询用户地址等

预期测试结果:
订单服务器web模块在A服务器,用户服务模块在B服务器,A可以远程调用B的功能。

在这里插入图片描述
这里制作的案例,三个模块都是在本地,真实环境可能是订单web模块在一台服务器A上,用户服务模块在另一台服务器B上,用户服务模块远程调用订单web模块的功能。

环境准备

所需:zookeeper、dubbo-admin管理控制台
zookeeper下载:
https://archive.apache.org/dist/zookeeper/zookeeper-3.4.13/
dubbo-admin下载:
https://github.com/apache/incubator-dubbo-ops
详细配置查看上一篇博客。
https://blog.csdn.net/qq_36654629/article/details/90052052
先将本地的zookerper服务跑起来,进入zookeeper下的bin目录,点击zkServer运行
在这里插入图片描述
成功跑起服务

在这里插入图片描述
运行dubbo-admin
java -jar dubbo-admin-0.0.1-SNAPSHOT.jar

在这里插入图片描述
浏览器访问:127.0.0.1:7001
默认使用root/root 登陆
在这里插入图片描述

创建模块

分别创建3个maven工程项目。
在这里插入图片描述
gmall-interface模块:公共接口层(model,service,exception…)
作用:定义公共接口,也可以导入公共依赖。
在这里插入图片描述

  • bean
package com.atguigu.gmall.bean;
import java.io.Serializable;
/**
 * 用户地址
 * @author jp
 *  */
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接口
    UserService:
package com.atguigu.gmall.service;

import java.util.List;

import com.atguigu.gmall.bean.UserAddress;

/**
 * 用户服务
 * @author jp
 *
 */
public interface UserService {
	
	/**
	 * 按照用户id返回所有的收货地址
	 * @param userId
	 * @return
	 */
	public List<UserAddress> getUserAddressList(String userId);
}

OrderService

package com.atguigu.gmall.service;

import java.util.List;

import com.atguigu.gmall.bean.UserAddress;

public interface OrderService {
	
	/**
	 * 初始化订单
	 * @param userId
	 */
	public List<UserAddress> initOrder(String userId);

}

gmall-user:用户模块(作为服务提供者,对用户接口的实现)
在这里插入图片描述
pom.xml

<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.atguigu.gmall</groupId>
  <artifactId>user-server</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
  <dependencies>
    <!-- 引入gmall-interface -->
   <dependency>
   <artifactId>gmall-interface</artifactId>
   <groupId>com.atguigu.gmall</groupId>
  	<version>0.0.1-SNAPSHOT</version>
   </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>
		
  </dependencies>
</project>
  • service
package com.atguigu.gmall.service.impl;

import java.util.Arrays;
import java.util.List;

import com.atguigu.gmall.bean.UserAddress;
import com.atguigu.gmall.service.UserService;

public class UserServiceImpl implements UserService{

	public List<UserAddress> getUserAddressList(String userId) {
		// TODO Auto-generated method stub
		System.out.println("UserServiceImpl.....old...");
		// TODO Auto-generated method stub
		UserAddress address1 = new UserAddress(1, "北京市昌平区宏福科技园综合楼3层", "1", "李老师", "010-56253825", "Y");
		UserAddress address2 = new UserAddress(2, "深圳市宝安区西部硅谷大厦B座3层(深圳分校)", "1", "王老师", "010-56253825", "N");
		/*try {
			Thread.sleep(4000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}*/
		return Arrays.asList(address1,address2);
	}

}

使用dubbo 改造gmall-user作为服务提供者,创建一个provider。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"
    xsi:schemaLocation="http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans-4.3.xsd        http://dubbo.apache.org/schema/dubbo        http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
 
    <!-- 1.指定当前服务/应用名字(同样的服务名字相同,不要和别的服务同名 -->
    <dubbo:application name="user-provider"  />
 
    <!-- 2.指定注册中心的位置 -->
    <dubbo:registry address="zookeeper://127.0.0.1:2181" />
 
    <!-- 3.指定通信规则(通信协议、通信端口) -->
    <dubbo:protocol name="dubbo" port="20880" />
 
    <!-- 4. 声明需要暴露的服务接口   ref指向服务的真正实现-->
    <dubbo:service interface="com.atguigu.gmall.service.UserService" ref="userService" />
 
    <!-- 5.服务的实现 -->
    <bean id="userService" class="com.atguigu.gmall.service.impl.UserServiceImpl" />
</beans>
  • MainApplication.java 启动服务
package com.atguigu.gmall.service.impl;

import java.io.IOException;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MainApplication {

	public static void main(String[] args) throws IOException {

	ClassPathXmlApplicationContext ioc=	new ClassPathXmlApplicationContext("provider.xml");
	ioc.start(); //启动容器
	
	System.in.read();  //阻塞一下
	}
}

运行MainApplication.java后可以在dubbo-admin 首页看到,有一个服务数。
在这里插入图片描述

点击服务管理->提供者可以看到有一个服务提供者

在这里插入图片描述
点击IP可以看到服务的详细信息
在这里插入图片描述

gmall-order-web:订单模块(作为服务消费者,调用用户模块):
在这里插入图片描述
pom.xml 引入 gmall-interface

<dependencies>
  	<dependency>
  		<groupId>com.atguigu.dubbo</groupId>
  		<artifactId>gmall-interface</artifactId>
  		<version>0.0.1-SNAPSHOT</version>
  	</dependency>
   </dependencies>
  • Service
package com.atguigu.gmall.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.atguigu.gmall.bean.UserAddress;
import com.atguigu.gmall.service.OrderService;
import com.atguigu.gmall.service.UserService;

@Service
public class OrderServiceImpl implements OrderService{

	@Autowired
	UserService userService;
	
	public List<UserAddress> initOrder(String userId) {
		// TODO Auto-generated method stub
		System.out.println("用户id:"+userId);
		//1、查询用户的收货地址
		List<UserAddress> addressList = userService.getUserAddressList(userId);
		for (UserAddress userAddress : addressList) {
			System.out.println(userAddress.getUserAddress());
		}
		return addressList;
	}

}

配置消费者信息,创建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="consumer-provider"  />
 
    <!--2. 使用zookeeper广播注册中心暴露发现服务地址 -->
    <dubbo:registry address="zookeeper://127.0.0.1:2181" />
 
    <!--3. 声明需要调用的远程服务 -->
    <dubbo:reference id="userService" interface="com.atguigu.gmall.service.UserService" />
</beans>

消费服务调用

  • MainApplication.java
package com.atguigu.gmall.service.impl;

import java.io.IOException;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.atguigu.gmall.service.OrderService;

public class MainApplication {

	
	public static void main(String[] args) throws IOException {
		
		ClassPathXmlApplicationContext ioc=new ClassPathXmlApplicationContext("consumer.xml");
		
		
		OrderService orderService=ioc.getBean(OrderService.class);
		
		orderService.initOrder("1");
		
		System.in.read();
		
	}
}

测试结果:
运行MainApplication.java可以在控制台看到,获取到的用户地址信息。说明订单模块调用到了用户模块的方法,获取到了用户信息。
在这里插入图片描述

并能在dubbo-admin服务治理-》应用里查看到
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

收破烂的小熊猫~

你的鼓励将是我创造最大的东西~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值