dubbox的基本使用

本文介绍如何使用DubboX框架与Zookeeper实现服务的发布与调用,包括搭建环境、配置服务提供者与消费者的步骤,并展示了具体的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

dubbox的基本使用

​ dubbox官方推荐使用zookeeper作为dubbox的注册中心, 负责服务地址的注册与查找,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小。

需注意, dubbox并没有在maven的中央仓库中存在, 需要手动将Dubbox的jar包安装到我的本地仓库中。

先将dubbo-2.8.4.jar包放到e:\setup, 然后输入命令

1) 查看maven的环境变量是否存在:  打开cmd  执行 mvn -version
2) 执行下列的命令即可
mvn install:install-file -Dfile=e:\setup\dubbo-2.8.4.jar -DgroupId=com.alibaba -DartifactId=dubbo -Dversion=2.8.4 -Dpackaging=jar

[外链图片转存失败(img-xgIqSvYW-1563930304005)(assets/1546412674865.png)]

  • 1)创建一个父工程: gossip-dubboxDemo-parent
    • 在父工程中添加如下依赖
<!-- 集中定义依赖版本号 -->
    <properties>
        <junit.version>4.12</junit.version>
        <spring.version>4.2.4.RELEASE</spring.version>
        <servlet-api.version>2.5</servlet-api.version>
        <dubbo.version>2.8.4</dubbo.version>
        <zookeeper.version>3.4.7</zookeeper.version>
        <zkclient.version>0.1</zkclient.version>
        <mybatis.version>3.2.8</mybatis.version>
        <mybatis.spring.version>1.2.2</mybatis.spring.version>
        <mysql.version>5.1.32</mysql.version>
        <druid.version>1.0.9</druid.version>
        <freemarker.version>2.3.23</freemarker.version>
        <solrj.version>4.10.2</solrj.version>
        <javassist.version>3.11.0.GA</javassist.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <!-- spring 相关的依赖包 -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</artifactId>
                <version>${spring.version}</version>
            </dependency>

            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aspects</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jms</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context-support</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
                <version>${spring.version}</version>
            </dependency>
            <!-- mybatis 相关的依赖包 -->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>${mybatis.version}</version>
            </dependency>
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis-spring</artifactId>
                <version>${mybatis.spring.version}</version>
            </dependency>
            <!-- springmvc的相关依赖包 -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>${spring.version}</version>
            </dependency>

            <!-- 数据库的相关依赖包 -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
            </dependency>
            <!-- 连接池 -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>${druid.version}</version>
            </dependency>

            <!-- 日志相关的依赖包 -->
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
                <version>1.6.4</version>
            </dependency>
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>1.2.17</version>
            </dependency>

            <!--json相关的依赖-->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.28</version>
            </dependency>


            <!--solr相关依赖-->
            <dependency>
                <groupId>org.apache.solr</groupId>
                <artifactId>solr-solrj</artifactId>
                <version>${solrj.version}</version>
            </dependency>


            <!--测试相关-->

            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <version>${spring.version}</version>
            </dependency>


            <!--dubbox相关依赖-->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>dubbo</artifactId>
                <version>${dubbo.version}</version>
            </dependency>
            <!--zookeeper相关依赖-->
            <dependency>
                <groupId>org.apache.zookeeper</groupId>
                <artifactId>zookeeper</artifactId>
                <version>${zookeeper.version}</version>
            </dependency>
            <dependency>
                <groupId>com.github.sgroschupf</groupId>
                <artifactId>zkclient</artifactId>
                <version>${zkclient.version}</version>
            </dependency>

            <dependency>
                <groupId>javassist</groupId>
                <artifactId>javassist</artifactId>
                <version>${javassist.version}</version>
            </dependency>
        </dependencies>

    </dependencyManagement>


    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>utf-8</encoding>
                </configuration>
            </plugin>

        </plugins>
    </build>
  • 2)创建服务提供者: dubboxdemo-service (war工程)

    • 2.1) 添加如下内容依赖:
    <dependencies>
    		<!-- Spring -->
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-context</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-beans</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-webmvc</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-jdbc</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-aspects</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-jms</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-context-support</artifactId>
    		</dependency>	
    		<!-- dubbo相关 -->
    		<dependency>
    			<groupId>com.alibaba</groupId>
    			<artifactId>dubbo</artifactId>			
    		</dependency>
    		<dependency>
    			<groupId>org.apache.zookeeper</groupId>
    			<artifactId>zookeeper</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>com.github.sgroschupf</groupId>
    			<artifactId>zkclient</artifactId>
    		</dependency>		
    		<dependency>
    			<groupId>javassist</groupId>
    			<artifactId>javassist</artifactId>
    		</dependency>		
    	</dependencies>
       <build>  
    	  <plugins>
    	      <plugin>  
    	          <groupId>org.apache.maven.plugins</groupId>  
    	          <artifactId>maven-compiler-plugin</artifactId>  
    	          <version>2.3.2</version>  
    	          <configuration>  
    	              <source>1.8</source>  
    	              <target>1.8</target>  
    	          </configuration>  
    	      </plugin>  
    	      <plugin>
    				<groupId>org.apache.tomcat.maven</groupId>
    				<artifactId>tomcat7-maven-plugin</artifactId>
    				<configuration>
    					<!-- 指定端口 -->
    					<port>8081</port>
    					<!-- 请求路径 -->
    					<path>/</path>
    				</configuration>
    	  	  </plugin>
    	  </plugins>  
        </build>
    • 2.2) 在工程的webapps下创建WEB-INF文件夹,找到web.xml,添加如下内容
    <!-- 加载spring容器 -->
    	<context-param>
    		<param-name>contextConfigLocation</param-name>
    		<param-value>classpath:applicationContext*.xml</param-value>
    	</context-param>
    	<listener>		
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    	</listener>	
    • 2.3) 创建一个业务的接口
      • 创建包:cn.itcast.dubboxdemo.service,用于存放业务接口
    package cn.itcast.dubboxdemo.service;
    /**
     * 业务接口
     */
    public interface UserService {	
    	public String getName();	
    }
    • 2.4) 创建业务实现类
      • 创建包cn.itcast.dubboxdemo.service.impl ,用于存放业务实现类。创建业务实现类:
    package cn.itcast.dubboxdemo.service.impl;
    import com.alibaba.dubbo.config.annotation.Service;
    import cn.itcast.dubbodemo.service.UserService;
    //注意:Service注解与原来不同,需要引入com.alibaba包下的
    @Service
    public class UserServiceImpl implements UserService {
    	public String getName() {		
    		return "itcast";
    	}
    }
    • 2.5) 编写配置文件
      • 在resources下创建applicationContext-service.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:p="http://www.springframework.org/schema/p"
    	xmlns:context="http://www.springframework.org/schema/context"
    	xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:mvc="http://www.springframework.org/schema/mvc"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
            http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
         
        <dubbo:application name="dubboxdemo-service"/>  
        <dubbo:registry protocol="zookeeper" address="192.168.72.141:2181,192.168.72.142:2181,192.168.72.143:2181"/>
        <!--注意:dubbo:annotation用于扫描@Service注解。-->
        <dubbo:annotation package="cn.itcast.dubboxdemo.service" /> 
    </beans>
    • 2.6) 测试运行
    tomcat7:run
    
  • 3.服务消费者开发

    • 3.1) 创建Maven工程(WAR)dubboxdemo-web ,在pom.xml引入依赖 ,同“dubboxdemo-service”工程。区别就是把tomcat插件的运行端口改为8082 。
    • 3.2) 在webapps下WEB-INF 目录,找到web.xml,添加如下内容
    <!-- 解决post乱码 -->
    	<filter>
    		<filter-name>CharacterEncodingFilter</filter-name>		
            <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    		<init-param>
    			<param-name>encoding</param-name>
    			<param-value>utf-8</param-value>
    		</init-param>
    		<init-param>  
                <param-name>forceEncoding</param-name>
                <param-value>true</param-value>  
            </init-param>  
    	</filter>
    	<filter-mapping>
    		<filter-name>CharacterEncodingFilter</filter-name>
    		<url-pattern>/*</url-pattern>
    	</filter-mapping>		
      <servlet>
      	<servlet-name>springmvc</servlet-name>  	
    	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      	<!-- 指定加载的配置文件 ,通过参数contextConfigLocation加载-->
      	<init-param>
      		<param-name>contextConfigLocation</param-name>
      		<param-value>classpath:applicationContext-web.xml</param-value>
      	</init-param>
      </servlet>  
      <servlet-mapping>
      	<servlet-name>springmvc</servlet-name>
      	<url-pattern>*.do</url-pattern>
      </servlet-mapping>
    • 3.3) 拷贝业务接口
      • 将“dubboxdemo-service”工程的cn.itcast.dubboxdemo.service 包以及下面的接口拷贝至此工程。
    • 3.4) 编写Controller : 包名: cn.itcast.dubboxdemo.controller
    package cn.itcast.dubboxdemo.controller;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    import cn.itcast.dubbodemo.service.UserService;
    @Controller
    @RequestMapping("/user")
    public class UserController {
    	@Reference
    	private UserService userService;	
    	@RequestMapping("/showName")
    	@ResponseBody
    	public String showName(){
    		return userService.getName();
    	}		
    }
    • 3.5) 编写spring配置文件
      • 在src/main/resources下创建applicationContext-web.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:p="http://www.springframework.org/schema/p"
    	xmlns:context="http://www.springframework.org/schema/context"
    	xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:mvc="http://www.springframework.org/schema/mvc"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
            http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    
    	<mvc:annotation-driven >
    		<mvc:message-converters register-defaults="false">
    			<bean class="org.springframework.http.converter.StringHttpMessageConverter">  
    				<constructor-arg value="UTF-8" />
    			</bean>  
    		</mvc:message-converters>	
    	</mvc:annotation-driven>
    	<!-- 引用dubbo 服务 -->
    	<dubbo:application name="dubboxdemo-web" />
    	<dubbo:registry protocol="zookeeper" address="192.168.72.141:2181,192.168.72.142:2181,192.168.72.143:2181"/>
         <dubbo:annotation package="cn.itcast.dubboxdemo.controller" />
    </beans>
    • 3.6) 测试运行
    tomcat7:run
    
    在浏览器输入http://localhost:8082/user/showName.do,查看浏览器输出结果
    

[外链图片转存失败(img-i5zdQ329-1563930304006)(assets/1558167764563.png)]

使用步骤:

  1. 导包: spring +dubbox+zookeeper

  2. 添加spring的配置文件:

    <dubbo:application name="dubboxdemo-web" />
    <dubbo:registry protocol="zookeeper" address="192.168.72.141:2181,192.168.72.142:2181,192.168.72.143:2181"/>
    <!--只需要更改扫描包的位置-->
    <dubbo:annotation package="cn.itcast.dubboxdemo.controller" />
  1. 在服务端添加 @service注解, 在web端添加@Reference

总结:

  • solrCloud :

    • 1)为什么要使用solrCloud: 搜索高并发 , 索引量大
    • 2)如果部署solrCloud需要先部署一个zookeeper
      zookeeper: 是一个集群的管理工具, 在solrCloud中主要用来管理配置文件, 集群状态, solrCloud主节点选举
    • 3)能够将zookeeper集群 和 solrCloud的集群搭建成功
    • 4)使用solrCloud的管理命令创建一个新的索引库(符合结构规定)
    • 5)使用solrj完成对solrCloud的操作
  • dubbox:

    • 基本使用
      sage-converters>
      </mvc:annotation-driven> <dubbo:application name=“dubboxdemo-web” />
      <dubbo:registry protocol=“zookeeper” address=“192.168.72.141:2181,192.168.72.142:2181,192.168.72.143:2181”/>
      <dubbo:annotation package=“cn.itcast.dubboxdemo.controller” />
    
    * 3.6) 测试运行
    
    

    tomcat7:run

    在浏览器输入http://localhost:8082/user/showName.do,查看浏览器输出结果

    
    

[外链图片转存中…(img-i5zdQ329-1563930304006)]

使用步骤:

  1. 导包: spring +dubbox+zookeeper

  2. 添加spring的配置文件:

    <dubbo:application name="dubboxdemo-web" />
    <dubbo:registry protocol="zookeeper" address="192.168.72.141:2181,192.168.72.142:2181,192.168.72.143:2181"/>
    <!--只需要更改扫描包的位置-->
    <dubbo:annotation package="cn.itcast.dubboxdemo.controller" />
  1. 在服务端添加 @service注解, 在web端添加@Reference
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值