Linfinity

Never say never.
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Dubbo笔记

Posted on 2020-08-13 15:24  Linfinity  阅读(150)  评论(0编辑  收藏  举报

一、dubbo简介

 

 

 

二、dubbo演示案例

前提

dubbo官方推荐创建三个模块

 

 

 

 1、dubbo-interface:接口工程(普通java工程),用于存放服务接口以及实体类

 

 

 

 2、dubbo-provider:服务提供工程(web工程),存放服务接口实现类

 

 3、dubbo-consumer:服务消费者工程(web工程),远程调用服务工程提供的服务

 

 

dubbo-interface工程

1、创建实体类

package cn.goo.domain;

import java.io.Serializable;

public class Car implements Serializable {
    private String brand;
    private String color;
    private Integer price;

    public String getBrand() {
        return brand;
    }

    public String getColor() {
        return color;
    }

    public Integer getPrice() {
        return price;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public void setPrice(Integer price) {
        this.price = price;
    }

    @Override
    public String toString() {
        return "Car{" +
                "brand='" + brand + '\'' +
                ", color='" + color + '\'' +
                ", price=" + price +
                '}';
    }
}
Car.java

2、创建服务接口

package cn.goo.service;

import cn.goo.domain.Car;

public interface CarService {
    Car buyCar(String brand, String color);
}

 

dubbo-provider工程

1、加入依赖

<!--    spring依赖-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.2.5.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.2.5.RELEASE</version>
    </dependency>

<!--    dubbo依赖-->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>dubbo</artifactId>
      <version>2.6.2</version>
    </dependency>

<!--    接口工程依赖-->
    <dependency>
      <groupId>cn.goo</groupId>
      <artifactId>dubbo-interface</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>

 

2、创建服务接口实现类

package cn.goo.service.impl;

import cn.goo.domain.Car;
import cn.goo.service.CarService;

public class CarServiceImpl implements CarService {
    @Override
    public Car buyCar(String brand, String color) {
        Car car = new Car();
        car.setBrand(brand);
        car.setColor(color);
        car.setPrice(250000);

        return car;
    }
}

 

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服务提供者的名称,需保证唯一性-->
    <dubbo:application name="dubbo-provider" />

<!--    设置dubbo使用的协议和端口号-->
    <dubbo:protocol name="dubbo" port="20880" />

<!--    暴露服务接口-->
<!--    registry="N/A" 表示为直连方式-->
    <dubbo:service interface="cn.goo.service.CarService" ref="carService" registry="N/A" />

<!--    加载服务接口的实现类是spring容器-->
    <bean id="carService" class="cn.goo.service.impl.CarServiceImpl"/>

</beans>

 

4、配置web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  version="4.0"
  metadata-complete="false">


    <!--注册spring的监听器-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:dubbo-provider.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
</web-app>

 

 

dubbo-consumer工程

1、加入依赖

<!--    spring依赖-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.2.5.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.2.5.RELEASE</version>
    </dependency>

<!--    dubbo依赖-->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>dubbo</artifactId>
      <version>2.6.2</version>
    </dependency>

<!--    接口工程依赖-->
    <dependency>
      <groupId>cn.goo</groupId>
      <artifactId>dubbo-interface</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>

 

2、编写controller

package cn.goo.controller;

import cn.goo.domain.Car;
import cn.goo.service.CarService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class CarController {

    @Autowired
    private CarService carService;

    @RequestMapping("/buyCar")
    public String buyCar(Model model, String brand, String color){
        Car car = carService.buyCar(brand, color);
        model.addAttribute("car", car);

        return "buyCar";
    }
}

 

3、创建两个配置文件

<?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="dubbo-consumer" />

<!--    引用远程接口服务-->
    <dubbo:reference id="carService"
                     interface="cn.goo.service.CarService"
                     url="dubbo://localhost:20880"
                     registry="N/A"/>
</beans>
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: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://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!--springmvc配置文件, 声明controller和其它web相关的对象-->
    <context:component-scan base-package="cn.goo.controller" />

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
    </bean>

    <mvc:annotation-driven />
    <!--
      1. 响应ajax请求,返回json
      2. 解决静态资源访问问题。
    -->
</beans>
springmvc.xml

 

4、配置web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  version="4.0"
  metadata-complete="false">


    <!--注册中央调度器-->
    <servlet>
        <servlet-name>myweb</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:dubbo-consumer.xml,classpath:springmvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>myweb</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

 

5、创建jsp

<%--
  Created by IntelliJ IDEA.
  User: Dominik
  Date: 2020/8/13
  Time: 14:16
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>订购详情</title>
</head>
<body>
<center>
    <h2>你要购买的汽车详情</h2>
    <p>品牌:${car.brand}</p>
    <p>颜色:${car.color}</p>
    <p>价格:${car.price}</p>
</center>

</body>
</html>

 

 

测试

1、分别使用tomcat启动provider和consumer

 

2、浏览器输入

http://localhost:8080/consumer/buyCar?brand=benz&color=blue

3、结果显示

 

 

三、Zookeeper注册中心

1、下载安装

1)官网下载安装包(windows和linux共用一个压缩包)

https://zookeeper.apache.org/releases.html

 

2)修改配置

将conf文件夹下的zoo_sample.cfg 复制一份 zoo.cfg

打开zoo.cfg编辑

修改:

dataDir=C:/zookeeper-3.4.14/data   (data文件夹需自己建好)

admin.serverPort=8989

 

3)启动

windows下:双击 zkServer.cmd

linux下:使用命令   ./zkServer.sh start

 

 

2、使用

使用zookeeper注册中心修改上面的案例,将直连方式改为注册中心方式

1)添加依赖

<!--    zookeeper依赖-->
    <dependency>
      <groupId>org.apache.curator</groupId>
      <artifactId>curator-framework</artifactId>
      <version>4.1.0</version>
    </dependency>

 

2)修改dubbo-provider.xml(添加一个标签,减少一个属性)

<!--    使用注册中心,指定注册中心地址-->
    <dubbo:registry address="zookeeper://192.168.31.49:2181" />

<!--    暴露服务接口-->
<!--    registry="N/A" 表示为直连方式-->
    <dubbo:service interface="cn.goo.service.CarService" ref="carService" />

 

3)修改dubbo-consumer.xml

    <!--    使用注册中心,指定注册中心地址-->
    <dubbo:registry address="zookeeper://192.168.31.49:2181" />

<!--    引用远程接口服务-->
    <dubbo:reference id="carService" interface="cn.goo.service.CarService"/>

 

 

3、版本号使用

dubbo-provider.xml

 

dubbo-consumer.xml