【SaaS - Export项目】26 - Dubbo入门案例,服务提供者provider配置,和服务消费者consumer配置,简单访问测试

新建两个web工程,一个用来提供service,另一个用来使用service。
dubbo是和spring整合的,依赖需要先有spring,再有dubbo

1. 服务提供者

1.1 pom.xml依赖

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <spring.version>5.2.9.RELEASE</spring.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <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-webmvc</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>
        <!-- dubbo相关 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.6.6</version>
        </dependency>
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-all</artifactId>
            <version>4.1.32.Final</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>4.0.0</version>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.zookeeper</groupId>
                    <artifactId>zookeeper</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.7</version>
        </dependency>
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>
    </dependencies>

1.2 web.xml配置
  <!-- Spring监听器加载dubbo-provider.xml -->
  <!-- 加载路径 -->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:dubbo-provider.xml</param-value>
  </context-param>
  <!-- listener负责监听当程序部署到服务器的时候,进行启动,读取类路径底下的配置文件(类似于main,充当main的角色) -->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
1.3 dubbo-provider.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: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的提供方配置: 4个 -->

    <!-- 1. 根节点,定义提供方服务名称(唯一的) 访问的时候先找根节点   -->
    <dubbo:application name="dubbodemo_provider"></dubbo:application>

    <!-- 2. 配置Zookeeper连接
            address的地址就是 zookeeper://ip地址  (ip地址:是zookeeper部署的电脑ip)
            2181为zookeeper的默认端口(可以修改,修改zookeeper核心配置文件)
     -->
    <dubbo:registry address="zookeeper://localhost" port="2181"></dubbo:registry>
    <!--<dubbo:registry address="zookeeper://192.168.21.45" port="2181"></dubbo:registry>-->

    <!-- 3.定义dubbo协议
            约定消费方和提供方之间传输格式,dubbo推荐的协议:dubbo协议
           dubbo协议的访问方法  【dubbo://ip:port/类/方法】(二进制传输协议)
    -->
    <dubbo:protocol name="dubbo" port="20880"></dubbo:protocol>

    <!-- 4.扫描dubbo提供方注解:也就是@Service注解(dubbo的)
           导入@Service注解的时候要注意,有两个service,一个是spring的,另一个是dubbo的
           我们需要导入dubbo的@Service注解(注入,让其可以被RBC调用)
    -->
    <dubbo:annotation package="com.xgf.service"></dubbo:annotation>

</beans>

1.4 编写服务接口及其实现类

IHelloWordService

public interface IHelloWordService {
    
    public String sayHello(String name);
}

HelloServiceImpl

import com.alibaba.dubbo.config.annotation.Service;
import com.xgf.service.IHelloWordService;

//当前的服务类对象由spring管理
//但是此处不使用spring的@Service注解 ,应该使用具有RPC功能的dubbo的@Service注解(导包)
@Service(interfaceClass = IHelloWordService.class,loadbalance = "random")
public class HelloServiceImpl implements IHelloWordService {
    @Override
    public String sayHello(String name) {
        return "Hello,"+name;
    }
}

【注意】这里的@Service引入的包import com.alibaba.dubbo.config.annotation.Service;

1.5 配置provider的tomcat服务器并启动

在这里插入图片描述
在这里插入图片描述

2. Dubbo服务消费者(调用服务)

要去调用provider中的Service,要求先注入Service,客户端服务接口类名称要与服务端接口名称一致;路径也要一致。
1)复制provider工程的service接口(路径名称要一致)
2)使用注入,但是不使用spring的autowire,而使用是dubbo的@Service配对的 @Reference注解

2.1 pom.xml依赖
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <spring.version>5.2.9.RELEASE</spring.version>
  </properties>

  <dependencies>
    <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-webmvc</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>
    <!-- dubbo相关 -->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>dubbo</artifactId>
      <version>2.6.6</version>
      <exclusions>
        <exclusion>
          <groupId>org.springframework</groupId>
          <artifactId>spring-web</artifactId>
        </exclusion>
        <exclusion>
          <groupId>org.springframework</groupId>
          <artifactId>spring-beans</artifactId>
        </exclusion>
        <exclusion>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>io.netty</groupId>
      <artifactId>netty-all</artifactId>
      <version>4.1.32.Final</version>
    </dependency>
    <dependency>
      <groupId>org.apache.curator</groupId>
      <artifactId>curator-framework</artifactId>
      <version>4.0.0</version>
      <exclusions>
        <exclusion>
          <groupId>org.apache.zookeeper</groupId>
          <artifactId>zookeeper</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.apache.zookeeper</groupId>
      <artifactId>zookeeper</artifactId>
      <version>3.4.7</version>
    </dependency>
    <dependency>
      <groupId>com.github.sgroschupf</groupId>
      <artifactId>zkclient</artifactId>
      <version>0.1</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5</version>
    </dependency>
  </dependencies>

2.2 web.xml配置

如果是web工程可以使用listener来加载,如果是springmvc要使用前端控制器来加载

  <!-- springmvc有一个前端控制器,可以读核心配置文件 (main方法 ) -->
  <!-- springmvc核心控制加载dubbo消费方配置 -->
  <!--配置springmvc-->
  <servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <!-- 读取consumer消费者核心配置文件 -->
      <param-value>classpath:dubbo-consumer.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <!-- 前端控制器 -->
  <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <!-- 拦截所有.do -->
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>

2.3 dubbo-consumer.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: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配置 -->
    <context:component-scan base-package="com.xgf.controller"></context:component-scan>
    <mvc:annotation-driven></mvc:annotation-driven>

    <!-- 二、dubbo的消费方配置:3个 -->
    <!-- 1.根节点,定义dubbo消费方服务名称 -->
    <dubbo:application name="dubbodemo_consumer"></dubbo:application>

    <!-- 2.配置Zookeeper连接(当前zookeeper部署地址是本机ip的localhost) -->
    <dubbo:registry address="zookeeper://localhost" port="2181"></dubbo:registry>

    <!-- 3.扫描dubbo消费注解:@Reference -->
    <dubbo:annotation package="com.xgf.controller"></dubbo:annotation>
<!--    让当前去获取provider的实现类对象 必须保护相同的id-->
<!--    <dubbo:reference interface="com.wzx.service.IHelloWordService"-->
<!--       id="helloWordService"/>-->
</beans>

2.4 复制provider的service接口到consumer的相同路径
//需要拷贝provider的service接口到consumer里面,而且要求文件路径一致【***】
//不然的话不能知道要调用的类有些什么方法
public interface IHelloWordService {

    public String sayHello(String name);
}
2.5 配置controller调用service
@Controller
@RequestMapping("/test")
public class MyController {
    //要去调用provider中的Service,要求先注入Service
    //1 复制provider工程的service接口
    //2 使用注入,但是不使用spring的autowire,而使用是dubbo的@Service配对的 @Reference注解


    //@Autowired
    // @Qualifier("helloWordService")
    @Reference(check = true,loadbalance = "random")
    IHelloWordService iHelloWordService;    //去provider取对象,用@Reference注解

    @RequestMapping(path = "/test01",method = {RequestMethod.GET,RequestMethod.POST})
    @ResponseBody
    public String test01(String name){
       String result =  iHelloWordService.sayHello(name);
       return result;    //ResponseBody将r返回结果转成json
    }

}

2.6 配置tomcat服务器并启动

【注意】这里tomcat服务器的端口需要修改,不能和前面配置的provider提供者的tomcat端口相同(不然无法启动)
在这里插入图片描述
启动成功:
在这里插入图片描述

2.7 动过url传递参数测试consumer是否能够访问provider的实现类方法

在这里插入图片描述

GitHub链接:https://github.com/strive-xgf/DubboTest

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值