前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何创建一个Dubbo的Demo

如何创建一个Dubbo的Demo

作者头像
框架师
发布2019-09-19 17:49:47
1.1K0
发布2019-09-19 17:49:47
举报
文章被收录于专栏:墨白的Java基地

首先祝所有的小伙伴中秋快乐,今天让我们来写一个简单的Dubbo-Demo,Dubbo作为一个RPC框架,其最核心的功能就是要实现跨网络的远程调用。这个Demo就是要创建两个应用,一个作为服务的提供者,一个作为服务的消费者。通过Dubbo来实现服务消费者远程调用服务提供者的方法。

首先,要开启zookeeper注册中心,这里使用Windows版zookeeper注册中心

下载地址:http://mirror.bit.edu.cn/apache/zookeeper/

下载完成加压到自己想要安装的目录盘符即可,找到zookeeper/bin目录的zkServer.cmd双击启动;

出现以下界面就是启动成功了;

然后让我们先写一个dubbo的服务者:dubbodemo_provider

步骤如下
  • 创建web项目: dubbodemo_provider
  • 添加pom.xml依赖
  • 编写web.xml
  • 编写dubbo-provider.xml
  • 编写服务接口
  • 编写服务实现
  • 启动tomcat,发布项目

创建maven-web项目,不知道怎么创建的小伙伴可以看我之前发表过的idea如何创建maven-web项目{IDEA配置Maven教程},里面有详细的介绍maven配置及如何创建一个web项目;

添加pom.xml依赖

代码语言:javascript
复制

<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.0modelVersion>  
  <groupId>com.mobaijungroupId>  
  <artifactId>dubbodemo_providerartifactId>  
  <version>1.0-SNAPSHOTversion>  
  <packaging>warpackaging>
  <properties> 
    <spring.version>5.0.2.RELEASEspring.version> 
  properties>  
  <dependencies> 
    <dependency> 
      <groupId>org.springframeworkgroupId>  
      <artifactId>spring-contextartifactId>  
      <version>${spring.version}version> 
    dependency>  
    <dependency> 
      <groupId>org.springframeworkgroupId>  
      <artifactId>spring-beansartifactId>  
      <version>${spring.version}version> 
    dependency>  
    <dependency> 
      <groupId>org.springframeworkgroupId>  
      <artifactId>spring-webmvcartifactId>  
      <version>${spring.version}version> 
    dependency>  
    <dependency> 
      <groupId>org.springframeworkgroupId>  
      <artifactId>spring-jdbcartifactId>  
      <version>${spring.version}version> 
    dependency>  
    <dependency> 
      <groupId>org.springframeworkgroupId>  
      <artifactId>spring-aspectsartifactId>  
      <version>${spring.version}version> 
    dependency>  
    <dependency> 
      <groupId>org.springframeworkgroupId>  
      <artifactId>spring-jmsartifactId>  
      <version>${spring.version}version> 
    dependency>  
    <dependency> 
      <groupId>org.springframeworkgroupId>  
      <artifactId>spring-context-supportartifactId>  
      <version>${spring.version}version> 
    dependency>  
      
    <dependency> 
      <groupId>com.alibabagroupId>  
      <artifactId>dubboartifactId>  
      <version>2.6.6version> 
    dependency>  
    <dependency> 
      <groupId>io.nettygroupId>  
      <artifactId>netty-allartifactId>  
      <version>4.1.32.Finalversion> 
    dependency>  
    <dependency> 
      <groupId>org.apache.curatorgroupId>  
      <artifactId>curator-frameworkartifactId>  
      <version>4.0.0version>  
      <exclusions> 
        <exclusion> 
          <groupId>org.apache.zookeepergroupId>  
          <artifactId>zookeeperartifactId> 
        exclusion> 
      exclusions> 
    dependency>  
    <dependency> 
      <groupId>org.apache.zookeepergroupId>  
      <artifactId>zookeeperartifactId>  
      <version>3.4.7version> 
    dependency>  
    <dependency> 
      <groupId>com.github.sgroschupfgroupId>  
      <artifactId>zkclientartifactId>  
      <version>0.1version> 
    dependency> 
  dependencies> 
project>

编写web.xml

代码语言:javascript
复制

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
                             http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         version="2.5">

    
    <context-param>
        <param-name>contextConfigLocationparam-name>
        <param-value>classpath*:dubbo-provider.xmlparam-value>
    context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
    listener>

web-app>

编写dubbo-provider.xml,添加日志配置文件

dubbo-provider.xml

代码语言:javascript
复制
<?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://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://code.alibabatech.com/schema/dubbo
       http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

    <!--指定服务提供者名称,通常为项目名称。可以随意定义,唯一即可。-->
    <dubbo:application name="dubbodemo_provider"/>

    <!--配置注册中心地址
        IP:这里的IP地址配置zookeeper注册中心的IP地址 
        -->
    <dubbo:registry address="zookeeper://192.168.0.0:2181"/>
    <!--
     配置请求协议            
            name 指定的是传输协议的名称,
                 值列表范围如:dubbo rmi hessian webservice http
            port:服务提供者的真实请求端口
    -->
    <dubbo:protocol name="dubbo" port="20881"/>

    <!--配置dubbo服务提供者的包扫描-->
    <dubbo:annotation package="com.mobaijun.service"/>

</beans>

编写服务接口HelloDubboService.java

代码语言:javascript
复制
package com.mobaijun.service;

/**
 * @author Auser·杰
 */
public interface HelloDubboService {

    String DubboHello(String name);
}

编写服务实现。注意这里的@Service引入的包是阿里巴巴的。

代码语言:javascript
复制
package com.mobaijun.service.impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.mobaijun.service.HelloDubboService;


/**
 * @Author:Auser·杰
 * @DATE:2019/9/12 15:18
 */
@Service
public class HelloDubboServiceImpl implements HelloDubboService {
    @Override
    public String DubboHello(String name) {
        return  "hello :" + name;
    }
}

部署tomcat,启动项目dubbodemo_provider

二:添加Dubbo的服务消费者:dubbodemo_consumer

步骤如下
  • 创建web项目: dubbodemo_consumer
  • 添加依赖
  • 编写web.xml
  • 编写dubbo-consumer.xml
  • 编写服务接口 (客户端接口要与服务端接口一样:包类方法参数返回值)
  • 编写控制器,调用服务
  • 启动tomcat,测试,观察服务是否调用成功。

创建web项目: dubbodemo_consumer,添加pom.xml依赖

添加项目依赖

代码语言:javascript
复制


<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.0modelVersion>  
  <groupId>com.mobaijungroupId>  
  <artifactId>dubbodemo_consumerartifactId>  
  <version>1.0-SNAPSHOTversion>  
  <packaging>warpackaging>
  <properties> 
    <spring.version>5.0.2.RELEASEspring.version> 
  properties>  
  <dependencies> 
    <dependency> 
      <groupId>org.springframeworkgroupId>  
      <artifactId>spring-contextartifactId>  
      <version>${spring.version}version> 
    dependency>  
    <dependency> 
      <groupId>org.springframeworkgroupId>  
      <artifactId>spring-beansartifactId>  
      <version>${spring.version}version> 
    dependency>  
    <dependency> 
      <groupId>org.springframeworkgroupId>  
      <artifactId>spring-webmvcartifactId>  
      <version>${spring.version}version> 
    dependency>  
    <dependency> 
      <groupId>org.springframeworkgroupId>  
      <artifactId>spring-jdbcartifactId>  
      <version>${spring.version}version> 
    dependency>  
    <dependency> 
      <groupId>org.springframeworkgroupId>  
      <artifactId>spring-aspectsartifactId>  
      <version>${spring.version}version> 
    dependency>  
    <dependency> 
      <groupId>org.springframeworkgroupId>  
      <artifactId>spring-jmsartifactId>  
      <version>${spring.version}version> 
    dependency>  
    <dependency> 
      <groupId>org.springframeworkgroupId>  
      <artifactId>spring-context-supportartifactId>  
      <version>${spring.version}version> 
    dependency>  
      
    <dependency> 
      <groupId>com.alibabagroupId>  
      <artifactId>dubboartifactId>  
      <version>2.6.6version>  
      <exclusions> 
        <exclusion> 
          <groupId>org.springframeworkgroupId>  
          <artifactId>spring-webartifactId> 
        exclusion>  
        <exclusion> 
          <groupId>org.springframeworkgroupId>  
          <artifactId>spring-beansartifactId> 
        exclusion>  
        <exclusion> 
          <groupId>org.springframeworkgroupId>  
          <artifactId>spring-contextartifactId> 
        exclusion> 
      exclusions> 
    dependency>  
    <dependency> 
      <groupId>io.nettygroupId>  
      <artifactId>netty-allartifactId>  
      <version>4.1.32.Finalversion> 
    dependency>  
    <dependency> 
      <groupId>org.apache.curatorgroupId>  
      <artifactId>curator-frameworkartifactId>  
      <version>4.0.0version>  
      <exclusions> 
        <exclusion> 
          <groupId>org.apache.zookeepergroupId>  
          <artifactId>zookeeperartifactId> 
        exclusion> 
      exclusions> 
    dependency>  
    <dependency> 
      <groupId>org.apache.zookeepergroupId>  
      <artifactId>zookeeperartifactId>  
      <version>3.4.7version> 
    dependency>  
    <dependency> 
      <groupId>com.github.sgroschupfgroupId>  
      <artifactId>zkclientartifactId>  
      <version>0.1version> 
    dependency>
    <dependency>
      <groupId>javax.servletgroupId>
      <artifactId>servlet-apiartifactId>
      <version>2.5version>
    dependency>
  dependencies> 
project>

编写web.xml

代码语言:javascript
复制

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
                             http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         version="2.5">
    <servlet>
        <servlet-name>springmvcservlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
        <init-param>
            <param-name>contextConfigLocationparam-name>
            <param-value>classpath:dubbo-consumer.xmlparam-value>
        init-param>
        <load-on-startup>1load-on-startup>
    servlet>
    <servlet-mapping>
        <servlet-name>springmvcservlet-name>
        <url-pattern>*.dourl-pattern>
    servlet-mapping>
web-app>

dubbo-consumer.xml

代码语言:javascript
复制
<?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://code.alibabatech.com/schema/dubbo"
       xmlns:context="http://www.springframework.org/schema/context"
       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://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 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!--开启SpringMVC注解扫描,扫描@Controller注解-->
    <context:component-scan base-package="com.mobaijun.controller"/>
    <!--SpringMVC注解驱动-->
    <mvc:annotation-driven/>
    <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
    <dubbo:application name="dubbodemo_consumer">
        <dubbo:parameter key="qos.enable" value="false"/>
    </dubbo:application>

    <!--配置注册中心地址-->
    <dubbo:registry address="zookeeper://192.168.0.0:2181"/>

    <!--开启dubbo注解扫描(@Reference注解)-->
    <dubbo:annotation package="com.mobaijun.web"/>
</beans>

编写服务接口。 注意:这里的接口类名称要与服务端接口名称一致;路径也要一致。

代码语言:javascript
复制
package com.mobaijun.service;

/**
 * @Author:Auser·杰
 * @DATE:2019/9/13 15:31
 */
public interface HelloDubboService {
    String DubboHello(String name);
}

编写控制器,调用服务HelloDubboController

代码语言:javascript
复制
package com.mobaijun.controlle;
import com.alibaba.dubbo.config.annotation.Reference;
import com.mobaijun.service.HelloService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
/**
 * @Author:Auser·杰
 * @DATE:2019/9/12 15:32
 */
@Controller
public class HelloDubboController {
    @Reference
    private HelloDubboService helloDubboService;
    @RequestMapping("hello")
    @ResponseBody
    public String hello(){
        String str  = helloDubboService.DubboHello("lisi");
        System.out.println(str);
        return str;
    }
}

启动tomcat,测试,观察服务是否调用成功。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 框架师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 步骤如下
  • 步骤如下
相关产品与服务
微服务引擎 TSE
微服务引擎(Tencent Cloud Service Engine)提供开箱即用的云上全场景微服务解决方案。支持开源增强的云原生注册配置中心(Zookeeper、Nacos 和 Apollo),北极星网格(腾讯自研并开源的 PolarisMesh)、云原生 API 网关(Kong)以及微服务应用托管的弹性微服务平台。微服务引擎完全兼容开源版本的使用方式,在功能、可用性和可运维性等多个方面进行增强。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档