dubbo快速入门案例

实验:模拟在分布式项目中,A服务器的订单系统需要调用B服务器上的用户系统查询用户的地址。

环境:zookeeper作为dubbo的注册中心,启动zookeeper。

dubbo基本概念

dubbo快速入门案例_第1张图片
服务提供者(Provider):暴露服务的服务提供方,服务提供者在启动时,向注册中心注册自己提供的服务。
服务消费者(Consumer): 调用远程服务的服务消费方,服务消费者在启动时,向注册中心订阅自己所需的服务,服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
注册中心(Registry):注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者
监控中心(Monitor):服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心

调用关系说明

  • 服务容器负责启动,加载,运行服务提供者。
  • 服务提供者在启动时,向注册中心注册自己提供的服务。
  • 服务消费者在启动时,向注册中心订阅自己所需的服务。
  • 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
  • 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。

开始搭建

项目结构图
dubbo快速入门案例_第2张图片
pom.xml文件内容:

com.xsw
    dubbo-demo
    pom
    1.0-SNAPSHOT
    
        dubbo-api
        dubbo-user-provider
        dubbo-order-consumer
    

    
        
            org.apache.dubbo
            dubbo
            2.7.6
        

        
            org.apache.curator
            curator-recipes
            5.0.0
        
    

dubbo-api模块

dubbo建议我们将服务接口,服务模型,服务异常等均放在 API 包中,因此在api中定义服务接口,服务提供者和服务消费者依赖这个项目就行。

在dubbo-api中定义服务接口和bean:
UserAddress.java:

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-否
	//省略getter和setter方法
}

UserService.java


/**
 * 用户服务
 */
public interface UserService {

    //根据用户id查询用户的地址
    public List<UserAddress> findAddressById(String userId);
}

实现服务提供者:用户模块 dubbo-user-provider

项目结构:
dubbo快速入门案例_第3张图片

  1. 实现服务接口
    UserServiceImpl.java
public class UserServiceImpl implements UserService {

    public List<UserAddress> findAddressbyId(String userId) {
        UserAddress user1 = new UserAddress(1, "广东省广州市荔湾区", "1", "张二狗", "13636363636","y");
        return Arrays.asList(user1);
    }
}

  1. 通过spring配置暴露服务
    provider.xml:

       
	
    
    
    
    
    
    
    

    

  1. 通过spring容器加载启动
public class App {

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

        ApplicationContext context = new ClassPathXmlApplicationContext("classpath:provider.xml");
        System.out.println("provider start...");
        System.in.read();//按任意键推出
    }
}

实现服务消费者:dubbo-order-consumer

  1. OrderServiceImpl.java(在orderservice中调用userService)
@Service
public class OrderServiceImpl implements OrderService {

    @Autowired
    UserService userService ;

    public List<UserAddress> findAddressById(String userId) {
        return userService.findAddressbyId(userId);
    }
}

  1. 使用spring配置引用远程服务
    consumer.xml




    

    

    

    

  1. 通过spring加载配置,调用服务
public class App {

    public static void main(String[] args) throws IOException {
        ApplicationContext context = new ClassPathXmlApplicationContext("classpath:consumer.xml");
        System.out.println("consumer start...");
        OrderService orderService = context.getBean(OrderService.class);
        List<UserAddress> addresses = orderService.findAddressById("1");
        for(UserAddress add:addresses){
            System.out.println(add.getUserAddress());
        }
        System.in.read();//按任意键退出
    }
}

调用结果:
dubbo快速入门案例_第4张图片

可以通过dubbo-admin管理后台可以看到服务的提供方与消费方
提供方:
dubbo快速入门案例_第5张图片
消费方:
dubbo快速入门案例_第6张图片

你可能感兴趣的:(dubbo,分布式,dubbo)