zoukankan      html  css  js  c++  java
  • Dubbo服务的搭建

      dubbo框架主要作用是基于RPC的远程调用服务管理,但是注册中心是用的zookeeper,搭建dubbo,首先要安装zookeeper,配置zookeeper。。。

    实现功能如图所示:(存在2个系统,A系统和B系统,A系统调用B系统的接口获取数据,用于查询用户列表)

    一、安装zookeeper

    1、解压下载的安装包

    2、修改配置文件zoo.cfg(解压出来不是这个名字,是zoo_sample.cfg,改了一下名字):该目录必须存在。

    3、启动zookeeper服务:

     二、搭建B系统

    1、创建工程(maven工程)

    2、导入依赖

     1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     2     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     3     <modelVersion>4.0.0</modelVersion>
     4     <groupId>cn.itcast.dubbo</groupId>
     5     <artifactId>dubbo-b</artifactId>
     6     <version>1.0.0-SNAPSHOT</version>
     7     <packaging>war</packaging>
     8 
     9     <dependencies>
    10         <!-- dubbo采用spring配置方式,所以需要导入spring容器依赖 -->
    11         <dependency>
    12             <groupId>org.springframework</groupId>
    13             <artifactId>spring-webmvc</artifactId>
    14             <version>4.1.3.RELEASE</version>
    15         </dependency>
    16         <dependency>
    17             <groupId>org.slf4j</groupId>
    18             <artifactId>slf4j-log4j12</artifactId>
    19             <version>1.6.4</version>
    20         </dependency>
    21 
    22         <dependency>
    23             <groupId>org.apache.zookeeper</groupId>
    24             <artifactId>zookeeper</artifactId>
    25             <version>3.3.3</version>
    26         </dependency>
    27 
    28         <dependency>
    29             <groupId>com.github.sgroschupf</groupId>
    30             <artifactId>zkclient</artifactId>
    31             <version>0.1</version>
    32         </dependency>
    33 
    34         <dependency>
    35             <groupId>com.alibaba</groupId>
    36             <artifactId>dubbo</artifactId>
    37             <version>2.5.3</version>
    38             <exclusions>
    39                 <exclusion>
    40                     <!-- 排除传递spring依赖 -->
    41                     <artifactId>spring</artifactId>
    42                     <groupId>org.springframework</groupId>
    43                 </exclusion>
    44             </exclusions>
    45         </dependency>
    46     </dependencies>
    47     <build>
    48         <plugins>
    49             <plugin>
    50                 <groupId>org.apache.tomcat.maven</groupId>
    51                 <artifactId>tomcat7-maven-plugin</artifactId>
    52                 <version>2.2</version>
    53                 <configuration>
    54                     <port>8181</port>
    55                     <path>/</path>
    56                 </configuration>
    57             </plugin>
    58         </plugins>
    59     </build>
    60 </project>

    3、配置log4j文件

    1 log4j.rootLogger=DEBUG,A1
    2 log4j.logger.com.taotao = DEBUG
    3 log4j.logger.org.mybatis = DEBUG
    4 
    5 log4j.appender.A1=org.apache.log4j.ConsoleAppender
    6 log4j.appender.A1.layout=org.apache.log4j.PatternLayout
    7 log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c]-[%p] %m%n

    4、创建User对象

    package cn.itcast.dubbo.pojo;
    
    //使用dubbo要求传输的对象必须实现序列化接口
    public class User implements java.io.Serializable {
    
        private static final long serialVersionUID = -2668999087589887337L;
    
        private Long id;
    
        private String username;
    
        private String password;
    
        private Integer age;
    
        public Long getId() {
            return id;
        }
    
        public void setId(Long id) {
            this.id = id;
        }
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
    }

    5、创建UserService(接口)提供查询服务

     1 package cn.itcast.dubbo.service;
     2 
     3 import java.util.List;
     4 
     5 import cn.itcast.dubbo.pojo.User;
     6 
     7 public interface UserService {
     8 
     9     /**
    10      * 查询所有的用户数据
    11      * 
    12      * @return
    13      */
    14     public List<User> queryAll();
    15 
    16 }

    6、创建UserServiceImpl实现类

     1 package cn.itcast.dubbo.service.impl;
     2 
     3 import java.util.ArrayList;
     4 import java.util.List;
     5 
     6 import cn.itcast.dubbo.pojo.User;
     7 import cn.itcast.dubbo.service.UserService;
     8 
     9 public class UserServiceImpl implements UserService{
    10 
    11     /**
    12      * 实现查询,这里做模拟实现,不做具体的数据库查询
    13      */
    14     public List<User> queryAll() {
    15         List<User> list = new ArrayList<User>();
    16         for (int i = 0; i < 10; i++) {
    17             User user = new User();
    18             user.setAge(10 + i);
    19             user.setId(Long.valueOf(i + 1));
    20             user.setPassword("123456");
    21             user.setUsername("username_" + i);
    22             list.add(user);
    23         }
    24         return list;
    25     }
    26 
    27 }

    7、编写dubbo配置文件

    具体配置:(dubbo-server.xml的配置,注意这个自己在eclipse中导入一下dubbo的xsd约束文件,不然会报错的)

     1 <beans xmlns="http://www.springframework.org/schema/beans"
     2     xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
     3     xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
     4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
     5     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
     6     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
     7     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
     8     http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
     9 
    10     <!-- 提供方应用信息,用于计算依赖关系 -->
    11     <dubbo:application name="dubbo-b-server" />
    12 
    13     <!-- 这里使用的注册中心是zookeeper -->
    14     <dubbo:registry address = "zookeeper://127.0.0.1:2181" client="zkclient" />
    15 
    16     <!-- 用dubbo协议在20880端口暴露服务 -->
    17     <dubbo:protocol name="dubbo" port="20880" />
    18 
    19     <!-- 将该接口暴露到dubbo中 -->
    20     <dubbo:service interface="cn.itcast.dubbo.service.UserService " ref="userServiceImpl"/>
    21 
    22     <!-- 将具体的实现类加入到Spring容器中 -->
    23     <bean id="userServiceImpl" class="cn.itcast.dubbo.service.impl.UserServiceImpl"/>
    24 
    25 </beans>

    8、编写web.xml 文件,主要是配置spring的容器,项目启动的时候启动spring的容器

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     3     xmlns="http://java.sun.com/xml/ns/javaee"
     4     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
     5     id="WebApp_ID" version="2.5">
     6     <display-name>dubbo-b</display-name>
     7     
     8     <context-param>
     9         <param-name>contextConfigLocation</param-name>
    10         <param-value>classpath:dubbo/dubbo-*.xml</param-value>
    11     </context-param>
    12     
    13     <!--Spring的ApplicationContext 载入 -->
    14     <listener>
    15         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    16     </listener>
    17     
    18 <welcome-file-list>
    19     <welcome-file>index.jsp</welcome-file>
    20 </welcome-file-list>
    21 
    22 </web-app>

    9、启动Tomcat(Maven Build的方式启动Tomcat)

    查看Tomcat日志:发现userservice的服务已经发布成功了。

    1 2019-05-19 21:59:13,588 [localhost-startStop-1] [com.alibaba.dubbo.registry.zookeeper.ZookeeperRegistry]-[INFO]  [DUBBO] Load registry store file C:Usersssc.dubbodubbo-registry-127.0.0.1.cache, data: {cn.itcast.dubbo.service.UserService=empty://169.254.103.222:20880/cn.itcast.dubbo.service.UserService?anyhost=true&application=dubbo-b-server&category=configurators&check=false&dubbo=2.5.3&interface=cn.itcast.dubbo.service.UserService&methods=queryAll&pid=3936&side=provider&timestamp=1558177989176}, dubbo version: 2.5.3, current host: 127.0.0.1
    2 2019-05-19 21:59:13,606 [localhost-startStop-1] [org.I0Itec.zkclient.ZkConnection]-[DEBUG] Creating new ZookKeeper instance to connect to 127.0.0.1:2181.
    3 2019-05-19 21:59:13,608 [ZkClient-EventThread-19-127.0.0.1:2181] [org.I0Itec.zkclient.ZkEventThread]-[INFO] Starting ZkClient event thread.

     可以看到,已经将UserService服务注册到zookeeper注册中心,协议采用的是dubbo

    三、搭建A系统

    1、创建工程

    2、导入依赖

     1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     2     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     3     <modelVersion>4.0.0</modelVersion>
     4     <groupId>cn.itcast.dubbo</groupId>
     5     <artifactId>dubbo-a</artifactId>
     6     <version>0.0.1-SNAPSHOT</version>
     7 
     8     <dependencies>
     9         <!-- dubbo采用spring配置方式,所以需要导入spring容器依赖 -->
    10         <dependency>
    11             <groupId>org.springframework</groupId>
    12             <artifactId>spring-webmvc</artifactId>
    13             <version>4.1.3.RELEASE</version>
    14         </dependency>
    15         <dependency>
    16             <groupId>org.slf4j</groupId>
    17             <artifactId>slf4j-log4j12</artifactId>
    18             <version>1.6.4</version>
    19         </dependency>
    20 
    21         <dependency>
    22             <groupId>com.alibaba</groupId>
    23             <artifactId>dubbo</artifactId>
    24             <version>2.5.3</version>
    25             <exclusions>
    26                 <exclusion>
    27                     <!-- 排除传递spring依赖 -->
    28                     <artifactId>spring</artifactId>
    29                     <groupId>org.springframework</groupId>
    30                 </exclusion>
    31             </exclusions>
    32         </dependency>
    33 
    34         <dependency>
    35             <groupId>org.apache.zookeeper</groupId>
    36             <artifactId>zookeeper</artifactId>
    37             <version>3.3.3</version>
    38         </dependency>
    39 
    40         <dependency>
    41             <groupId>com.github.sgroschupf</groupId>
    42             <artifactId>zkclient</artifactId>
    43             <version>0.1</version>
    44         </dependency>
    45 
    46         <!-- 单元测试 -->
    47         <dependency>
    48             <groupId>junit</groupId>
    49             <artifactId>junit</artifactId>
    50             <version>4.10</version>
    51             <scope>test</scope>
    52         </dependency>
    53     </dependencies>
    54 </project>

    3、配置log4j文件

    1 log4j.rootLogger=DEBUG,A1
    2 log4j.logger.com.taotao = DEBUG
    3 log4j.logger.org.mybatis = DEBUG
    4 
    5 log4j.appender.A1=org.apache.log4j.ConsoleAppender
    6 log4j.appender.A1.layout=org.apache.log4j.PatternLayout
    7 log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c]-[%p] %m%n

    4、从b系统中拷贝User对象、UserService接口到a系统

     

    5、编写dubbo配置文件

    配置文件如下:

     1 <beans xmlns="http://www.springframework.org/schema/beans"
     2     xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
     3     xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
     4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
     5     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
     6     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
     7     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
     8     http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
     9 
    10     <!-- 提供方应用信息,用于计算依赖关系 -->
    11     <dubbo:application name="dubbo-a-consumer"/>
    12 
    13     <!-- 这里使用的注册中心是zookeeper -->
    14     <dubbo:registry address="zookeeper://127.0.0.1:2181" client="zkclient"/>
    15     
    16     <!-- 从注册中心中查找服务 -->
    17     <dubbo:referenceid="userService" interface="cn.itcast.dubbo.service.UserService"/>
    18 
    19 </beans>

    6、编写UserService测试用例

     1 package cn.itcast.dubbo.service;
     2 
     3 import java.net.InetAddress;
     4 import java.util.List;
     5 
     6 import org.junit.Before;
     7 import org.junit.Test;
     8 import org.springframework.context.ApplicationContext;
     9 import org.springframework.context.support.ClassPathXmlApplicationContext;
    10 
    11 import cn.itcast.dubbo.pojo.User;
    12 
    13 import com.alibaba.dubbo.common.utils.NetUtils;
    14 
    15 public class UserServiceTest {
    16 
    17     private UserService userService;
    18 
    19     @Before
    20     public void setUp() throws Exception {
    21         ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:dubbo/*.xml");
    22         this.userService = applicationContext.getBean(UserService.class);
    23     }
    24 
    25     @Test
    26     public void testQueryAll() {
    27         List<User> users = this.userService.queryAll();
    28         for (User user : users) {
    29             System.out.println(user);
    30         }
    31     }
    32      
    33     public static void main(String[] args) {
    34         InetAddress localAddress = NetUtils.getLocalAddress();
    35         System.out.println(localAddress.getHostAddress());
    36 
    37     }
    38 }

    四、解决代码重复的问题

    1、创建dubbo-b-api

    2、将dubbo-b中的pojo和service接口移动到dubbo-b-api中

    3、在dubbo-b的pom.xml文件中添加dubbo-b-api的依赖

    4、在dubbo-a的pom.xml文件中添加dubbo-b-api的依赖,并且将pojo与service接口删除

     

    5、分别删除dubbo-a和dubbo-b中的重复代码

    注意:启动时,不要忘记吧dubbo-b-api项目maven install安装到中央仓库

  • 相关阅读:
    LVS的DR模式测试案例<仅个人记录>
    awk命令小结
    iptables命令提取总结,包含扩展模块<取自朱双印博客>
    如何配置nginx屏蔽恶意域名解析指向《包含隐藏nginx版本号》
    CentOS升级OpenSSL至OpenSSL 1.1.0f版本<其中有遇到libcrypto.so的问题>
    U-Mail企业邮箱如何导入授权文件
    Linux花生壳使用篇
    windows远程桌面连接时,显示发生身份验证错误,给函数提供的身份无效
    批量屏蔽符合条件的IP地址,支持添加白名单,IP段,增量,大于指定次数的IP
    rsync 定时备份<crontab+backrsync.sh> 简陋版
  • 原文地址:https://www.cnblogs.com/ssh-html/p/10878679.html
Copyright © 2011-2022 走看看