一、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 + '}'; } }
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>
<?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>
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