飙血推荐
  • HTML教程
  • MySQL教程
  • JavaScript基础教程
  • php入门教程
  • JavaScript正则表达式运用
  • Excel函数教程
  • AngularJS教程
  • UEditor使用文档
  • ThinkPHP5.0教程

dubbo 实现简易分布式服务

时间:2022-01-18  作者:look-word  

dubbo 实现简易分布式服务

服务器需要搭建zookeeper环境

zookeeper端口2181

还需要有java环境

1.需求

某个电商系统,订单服务需要调用用户服务获取某个用户的所有地址;

我们现在 需要创建两个服务模块进行测试

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

测试预期结果

订单服务web模块在A服务器,用户服务模块在B服务器,A可以远程调用B的功能。

2.工程架构

image-20220118114329482

image-20220118114313932

3.创建项目

3.1 公共接口层 ego-interface

简单maven项目即可

image-20220118105604937

1.修改域名文件

<dependencies>
    <dependency>
      <groupId>域名ectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>${域名sion}</version>
    </dependency>
  </dependencies>

2.创建实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserAddress implements Serializable {
    private static final long serialVersionUID = 1L;
    private Integer id;
    private String userId;
    private String userAddress;
}

3.创建公共接口

UserService
public interface UserService {
    /**
     * 查询用户的所有地址
     * @return
     */
    public List<UserAddress> queryAllAddress(Integer id);
}

OrderService
public interface OrderService {
    /**
     * 根据用户id 查找订单
     * @param uid 用户id
     * @return 订单
     */
    public List<UserAddress> initOrder(Integer uid);
}

3.2 用户服务模块 ego-user-service-provider (服务提供者)

1.修改域名文件

<dependencies>
    <!-- 这里是公共接口层哦-->
    <dependency>
      <groupId>域名</groupId>
      <artifactId>03-ego-interface</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>

  <dependency>
    <groupId>域名aba</groupId>
    <artifactId>dubbo</artifactId>
    <version>2.6.7</version>
  </dependency>

  <dependency>
    <groupId>域名ec</groupId>
    <artifactId>zkclient</artifactId>
    <version>域名</version>
  </dependency>
  <!-- curator-framework -->
  <dependency>
    <groupId>域名tor</groupId>
    <artifactId>curator-framework</artifactId>
    <version>4.1.0</version>
  </dependency>
  <dependency>
    <groupId>域名y</groupId>
    <artifactId>netty-all</artifactId>
    <version>域名.Final</version>
  </dependency>
</dependencies>

2.创建服务实体类

@Service
public class UserServiceImpl implements UserService {
    private static List<UserAddress> addresses=new ArrayList<UserAddress>();
    static {
        域名(new UserAddress(1,"1","湖南省株洲市荷塘区湖南化工职业技术学院"));
        域名(new UserAddress(2,"2","湖南省永州市祁阳县"));
    }

    @Override
    public List<UserAddress> queryAllAddress(Integer id) {
        return addresses;
    }
}

域名

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://域名/schema/beans"
       xmlns:xsi="http://域名/2001/XMLSchema-instance"
       xmlns:context="http://域名/schema/context"
       xmlns:dubbo="http://域名/schema/dubbo"
       xsi:schemaLocation="http://域名/schema/beans http://域名/schema/beans/spring-域名
		http://域名/schema/context http://域名/schema/context/spring-域名
		http://域名/schema/dubbo http://域名/schema/dubbo/域名
		http://域名/schema/dubbo http://域名/schema/dubbo/域名">
    <!-- 声明应用程序的名称 -->
    <dubbo:application name="ego-user-service-provider"/>
    <!--指定注册中心的地址 -->
    <dubbo:registry
            address="zookeeper://服务器IP地址:2181"/>
    <!--使用dubbo协议,将服务暴露在20880端口 -->
    <dubbo:protocol name="dubbo" port="20880"/>

<!--     声明要暴露的实现类的对象-->
 <bean id="userService"
    class="域名域名ServiceImpl"/>
  
    <!-- 进行服务暴露 -->
    <dubbo:service interface="域名域名Service"
                   ref="userServiceImpl"/>
</beans>

4.测试服务

TestProvider
public class TestProvider {
    public static void main(String[] args) throws IOException {
        ApplicationContext ac=
                new ClassPathXmlApplicationContext("classpath:域名");
        域名tln("服务提供者启动成功");
        域名();
    }
}

3.3 订单服务(服务消费者) ego-order-service-consumer

1.修改域名文件

<dependencies>
    <!-- 这里是公共接口层哦-->
    <dependency>
      <groupId>域名</groupId>
      <artifactId>03-ego-interface</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>

  <dependency>
    <groupId>域名aba</groupId>
    <artifactId>dubbo</artifactId>
    <version>2.6.7</version>
  </dependency>

  <dependency>
    <groupId>域名ec</groupId>
    <artifactId>zkclient</artifactId>
    <version>域名</version>
  </dependency>
  <!-- curator-framework -->
  <dependency>
    <groupId>域名tor</groupId>
    <artifactId>curator-framework</artifactId>
    <version>4.1.0</version>
  </dependency>
  <dependency>
    <groupId>域名y</groupId>
    <artifactId>netty-all</artifactId>
    <version>域名.Final</version>
  </dependency>
</dependencies>

2.创建服务实体类

@Service
public class OrderServiceImpl implements OrderService {

    @Reference
    private UserService userService;

    public void setUserService(UserService userService) {
        域名Service = userService;
    }

    @Override
    public List<UserAddress> initOrder(Integer uid) {
        return 域名yAllAddress(uid);
    }
}

域名

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://域名/schema/beans"
       xmlns:xsi="http://域名/2001/XMLSchema-instance"
       xmlns:p="http://域名/schema/p"
       xmlns:c="http://域名/schema/c" xmlns:dubbo="http://域名/schema/dubbo"
       xmlns:context="http://域名/schema/context"
       xsi:schemaLocation="http://域名/schema/beans
    http://域名/schema/beans/spring-域名 http://域名/schema/dubbo http://域名/schema/dubbo/域名 http://域名/schema/context http://域名/schema/context/spring-域名">
<!--    声明服务名称-->
    <dubbo:application name="02-ego-order-service-consumer"/>
<!--    指定注册中心地址-->
    <dubbo:registry
            address="zookeeper://服务器ip地址:2181"/>
<!--  生成远程调用对象-->
    <dubbo:reference
            id="userService" interface="域名域名Service"/>
   
<!--   创建订单对象-->
  <bean id="orderService" class="域名域名rServiceImpl">
        <property name="userService" ref="userService"/>
<    </bean>
</beans>

测试类

public class TestConsumer {
    public static void main(String[] args) throws IOException {
        ApplicationContext ac=
                new ClassPathXmlApplicationContext("classpath:域名");
        OrderService orderService = (OrderService) 域名ean(域名s);
        for (UserAddress userAddress : 域名Order(1)) {
            域名tln(userAddress);
        }
        域名();
    }
}

标签:编程
湘ICP备14001474号-3  投诉建议:234161800@qq.com   部分内容来源于网络,如有侵权,请联系删除。