本文将讲述基于已经搭建好的dubbo以及zookeeper,创建服务的消费者,并从zookeeper上获取已经注册的生产者。
1、环境约束
- win10 64为操作系统
- idea2018.1.5
- maven-3.0.5
- jdk-8u162-windows-x64
2、软件下载
百度网盘:
链接:https://pan.baidu.com/s/1gfnI8NqUYgYK1g0ULGIV2w
提取码:q9pl
3、前提约束
- zookeeper以及dubbo已经安装并启动
- 将本专辑中的 《04 创建service层【服务生产者】》做完毕
4、创建一个新的模块fbs-web,步骤如下:
![16204070-5b528fd722d412a7.gif](https://i-blog.csdnimg.cn/blog_migrate/90726b2a467bff88776ea2964dbaf643.gif)
创建fbs-web模块
在pom.xml中添加依赖:
<dependency>
<groupId>net.wanho.fenbushi</groupId>
<artifactId>fbs-interface</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
修改pom.xml中的build标签如下:
<build>
<finalName>fbs-service</finalName>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<configuration>
<path>/</path>
<port>8082</port>
</configuration>
</plugin>
</plugins>
</build>
5、在该模块的的src/main下面加入java文件夹,设置为Sources Root,在该文件夹下创建net.wanho.fenbushi.controller包,在包下面加入UserController.java类。
package net.wanho.fenbushi.controller;
import net.wanho.fenbushi.pojo.User;
import net.wanho.fenbushi.service.UserService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource;
import java.util.List;
@Controller
public class UserController {
@Resource
private UserService userService;
@RequestMapping("/user/query")
@ResponseBody
public List<User> queryUsers()
{
return userService.queryUsers();
}
}
6、在该模块的的src/main下面加入resources文件夹,设置为Resources Root,在该文件夹下创建spring-mvc.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: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://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<context:component-scan base-package="net.wanho.fenbushi.controller"></context:component-scan>
<!-- 引用dubbo服务 -->
<dubbo:application name="fenbushi-service"/>
<!-- 提供依赖信息,去zookeeper上找寻注册信息 -->
<dubbo:registry protocol="zookeeper" address="192.168.100.192:2181"/>
<!--此处的id,就是controller类中的成员变量的名字-->
<dubbo:reference interface="net.wanho.fenbushi.service.UserService" id="userService"/>
</beans>
7、修改src/main/webapp/WEB-INF/web.xml,配置子容器即可
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<servlet>
<servlet-name>mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
项目结构如下:
![16204070-97c7d53cc5bcf80f.png](https://i-blog.csdnimg.cn/blog_migrate/1be3edbc1a88c6b4db3b77178b705fe7.png)
2.png
8、启动以及测试
- 只有生产者即service
- 正常状态
- 测试
打开浏览器,输入 http://localhost:8082/user/query ,回车,等待,即可看到如下信息:web层返回了service层的信息
这时候要特别注意,此时返回的信息是service层写死的,更重要的我们在8082的服务里访问到了8081的服务,这就是分布式。
9、总结
这一专辑我们完成了从零开始搭建一个简单的分布式项目,要注意一下几点:
- 我们把web层发布到了一个tomcat,把service层发布了另外一个tomcat
- web层要访问service层要借助于中介:zookeeper注册中心
- dubbo要启动必须先启动zookeeper
- 分布式的好处之一是当web层有错误时只需修改和重启web层,与service层无关。