Dubbo理解和搭建记录
第一次记录不喜勿喷,有错误请求指正,谢谢大家 by:whmy
1.关于dubbo
Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和srping框架无缝集成。
为什么需要使用dubbo?
以前使用mvc项目如果要修改代码,项目整个都要重新启动,重新启动时会因为项目过于庞大而需要大量的时间,并且当一个业务的代码出现问题很有可能会影响到其他的模块以至于整个项目挂掉,这些种种原因使得业务需要分模块分别运行在不同的服务器上的.为了分布在各个服务器上的模块之间的交流更加流畅,dubbo就出来帮我们解决这个问题.
dubbo如此厉害,我决定搭建一个dubbo+zookepper+mysql的简单web服务器,并把它记录下来.
dubbo需要使用注册中心才能更好的去架设项目,当然自己本地的时候可以使用让服务消费者之间去访问dubbo来实现交互,但是这里我们使用zookepper来作为注册中心.
为什么需要注册中心
dubbo会把项目会分成服务消费者和服务提供者,服务提供者为类似mvc上面的service层和dao层主要是实现业务逻辑的地方,而服务消费者就是调用服务的地方,比如说我们的controller层,只是接收http请求和返回结果两部分,不做业务的逻辑处理,而当一个项目越来越大消费者和提供者越来越多的时候,消费者想要调用提供者需要它的明确ip地址,每添加了一个消费者就需要给调用该服务的消费者ip地址让项目扩展起来变得十分繁琐,这时出现了一个中间件,类似于dns一样不用再记住一个一个的ip地址,只需要记住中间件的ip并告诉它你需要请求的服务名称(接口名称),就能帮访问服务并把请求结果返回给消费者,使提供者和消费者都不需要知道双方的具体ip就能实现交互.
2.准备工作
1.使用的工具为eclipse
2.使用的是zookeeper-3.4.5(可以去官网下载);
3.mysql 8.0.11
4.平台为 MAC
下载zookeeper并解压,来到根目录先修改zookepper的配置文件(路径为:zookeeper-3.4.5/conf/zoo.cfg),因为只是简单web应用所以不用做太多的修改,只要改数据文件夹和日志文件的存放位置,并建立该文件夹,如有需要可以更改一下端口,我这里就默认的2181
dataDir=/Users/****/JAVA/zookeeper-3.4.5/logs
dataLogDir=/Users/****/JAVA/zookeeper-3.4.5/data
clientPort=2181
注意如果没有建立日志或数据文件夹的话,zookeeper运行可能会报错!
打开终端输入 cd JAVA/zookeeper-3.4.5/bin/ 进入到zookepper的bin目录
运行 ./zkServer.sh start 启动注册中心
显示started为成功,如果还不放心可以 ps -ef |grep zoo 进行查看,出现以下内容就可以放心了
创建数据库
3.正式开始
我们需要创建三个项目,分别是服务接口,服务实现和web项目
打开eclipse,创建maven项目
3.1创建接口项目
创建接口的时候犯了两个错误,接口名称忘记首字母大写,项目名和包名的interface少了个t变成了inerface 见谅
首先我们创建服务接口,选择模版
输入自己的包名和项目名,这里我取名叫dubbointerface
删除main/test文件
创建userService 接口,方便起见只写了一个方法
package fun.whmy.dubboinerface;
import java.util.List;
import fun.whmy.dubboinerface.bean.User;
public interface userService {
public List<User> getAllUser();
}
创建User的bean类
package fun.whmy.dubboinerface.bean;
import java.io.Serializable;
public class User implements Serializable{
private static final long serialVersionUID = -6583336323148078719L;
private int id;
private String nick;
private String phone;
private String adress;
private String email;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getNick() {
return nick;
}
public void setNick(String nick) {
this.nick = nick;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getAdress() {
return adress;
}
public void setAdress(String adress) {
this.adress = adress;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
最终项目为
并导出jar包命名为dubbointerface-0.0.1 注意设置版本号
到此接口项目完成
3.2创建service项目
一样创建maven项目使用webapp模版,并设置项目名,这里我设置为dubboservice
如果有报错删除index.jsp文件就可以,因为没有引入jar包
在main下面创建java文件夹和webapp/WEB-INF/lib文件夹
并把jar包复制到lib文件夹下
在pom文件中导入依赖
<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.0</modelVersion>
<groupId>fun.whmy</groupId>
<artifactId>dubboservice</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>dubboservice</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>4.3.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>4.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>4.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>4.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-ldap</artifactId>
<version>4.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-acl</artifactId>
<version>4.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-cas</artifactId>
<version>4.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
<version>4.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.3.5.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.3</version>
<exclusions>
<exclusion>
<artifactId>spring</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
<!-- zkclient -->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
<!-- zookeeper -->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.10</version>
</dependency>
<!-- mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version>
</dependency>
<!-- alibaba 数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.6</version>
</dependency>
<!-- 添加Mybatis的配置 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.3.0</version>
</dependency>
<!--mybatis-spring适配器 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
<!-- c3p0 的jar包-->
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-nop</artifactId>
<version>1.7.2</version>
</dependency>
</dependencies>
</project>
添加本地jar包的依赖到pom文件
<dependency>
<artifactId>dubbointerface</artifactId>
<groupId>fun.whmy.dubbointerface</groupId>
<version>0.0.1</version>
<scope>system</scope>
<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/dubbointerface-0.0.1.jar</systemPath>
</dependency>
创建UserServiceImpl 并实现userService接口(这里发现接口名首字母忘记大写了,实在罪过)
加上Service注解
package fun.whmy.dubboservice.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import fun.whmy.dubboinerface.userService;
import fun.whmy.dubboinerface.bean.User;
import fun.whmy.dubboservice.mapper.UserMapper;
@Service
public class UserServiceImpl implements userService{
@Autowired
UserMapper mapper;
@Override
public List<User> getAllUser() {
return mapper.getAllUser();
}
}
这里我们使用Mybatis 进行数据库访问,创建UserMapper类和UserMapper.xml文件
package fun.whmy.dubboservice.mapper;
import java.util.List;
import fun.whmy.dubboinerface.bean.User;
public interface UserMapper {
public List<User> getAllUser();
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="fun.whmy.dubboservice.mapper.UserMapper">
<select id="getAllUser"
resultType="fun.whmy.dubboinerface.bean.User">
select * from user
</select>
</mapper>
在resource文件夹下创建配置文件applicationContest.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"
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 ">
<import resource="applicationContext-dubbo-provider.xml"/>
<import resource="applicationContext-datasource.xml"/>
</beans>
接在resource下创建applicationContext-dubbo-provider.xml
这里在引入dubbo的约束文件时,会报错不影响,如果不想有报错,百度一下解决方法这里就不写出来了
因为我的zookepper时开启在本地机子上的,所以注册中心的地址是localhost,如果是在虚拟机或其他机子上要输入相应的ip地址
<dubbo:application name=“dubboservice” /> 这个名字最好和你的项目名一致
<?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">
<dubbo:application name="dubboservice" />
<!--配置注册中心 address 地址 protocol 注册中心的协议 -->
<dubbo:registry address="localhost:2181"
protocol="zookeeper" />
<!-- <dubbo:registry address="redis://127.0.0.1:6376" /> -->
<!-- 服务的具体实现 -->
<bean id="userService"
class="fun.whmy.dubboservice.impl.UserServiceImpl" />
<!-- 服务暴露出去,ref具体哪个服务 -->
<dubbo:service
interface="fun.whmy.dubboinerface.userService" ref="userService" />
</beans>
创建applicationContext-datasource.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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
<bean id="dataSource"
class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<property name="url" value="jdbc:mysql://localhost/dubbodemo?characterEncoding=utf-8" />
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="username" value="test" />
<property name="password" value="12345678" />
<property name="filters" value="stat" />
<!-- 最大并发连接数 -->
<property name="maxActive" value="20" />
<!-- 初始化连接数量 -->
<property name="initialSize" value="1" />
<!-- 配置获取连接等待超时的时间 -->
<property name="maxWait" value="60000" />
<!-- 最小空闲连接数 -->
<property name="minIdle" value="1" />
<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="60000" />
<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="300000" />
<property name="testWhileIdle" value="true" />
<property name="testOnBorrow" value="false" />
<property name="testOnReturn" value="false" />
<property name="poolPreparedStatements" value="true" />
<property name="maxOpenPreparedStatements" value="20" />
</bean>
<!-- 整合mybatis -->
<bean id="sqlSessionFactory"
class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 关联数据源 -->
<property name="dataSource" ref="dataSource"></property>
<!-- 扫描mapper包中的xml 和配置文件 -->
<property name="mapperLocations" value="classpath:fun/whmy/dubboservice/mapper/*.xml"></property>
</bean>
<!-- 扫描mapperxml 让他们自动填充 -->
<bean id="mapperScannerConfigurer"
class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="fun/whmy/dubboservice/mapper"></property>
<property name="sqlSessionFactoryBeanName"
value="sqlSessionFactory">
</property>
</bean>
<!-- 事务管理管理器 -->
<bean id="txManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 声明式事务 引用上面定义的事务管理器 -->
<tx:annotation-driven
transaction-manager="txManager" />
</beans>
我这里是用了alibaba的数据库连接池
最后设置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>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!-- 加载spring容器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
最后创建一个tomcat把项目部署上去,启动如果没有报错则我们的服务提供者已经完成了
3.3创建web项目
一样创建maven项目使用webapp模版,并设置项目名,这里我设置为dubboweb
首先添加pom文件依赖
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>fun.whmy</groupId>
<artifactId>dubboweb</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>dubboweb Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<artifactId>dubbointerface</artifactId>
<groupId>fun.whmy.dubbointerface</groupId>
<version>0.0.1</version>
<scope>system</scope>
<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/dubbointerface-0.0.1.jar</systemPath>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- 配置json依赖,responsebody -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.6.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.6.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.6.0</version>
</dependency>
<!-- end -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>4.3.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>4.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>4.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>4.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-ldap</artifactId>
<version>4.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-acl</artifactId>
<version>4.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-cas</artifactId>
<version>4.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
<version>4.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.3.5.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.3</version>
<exclusions>
<exclusion>
<artifactId>spring</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
<!-- zkclient -->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
<!-- zookeeper -->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.10</version>
</dependency>
<!-- jsp -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<!-- redis注册中心 -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>commons-pool</groupId>
<artifactId>commons-pool</artifactId>
<version>1.6</version>
</dependency>
</dependencies>
<build>
<finalName>dubboweb</finalName>
</build>
</project>
因为添加了jsp的依赖所以index.jsp不会报错了
创建UserController 类
package fun.whmy.dubboweb;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import fun.whmy.dubboinerface.userService;
import fun.whmy.dubboinerface.bean.User;
@Controller
public class UserController {
@Autowired
private userService service;
@RequestMapping(value="/getall")
@ResponseBody
public List index(HttpServletRequest request,HttpServletResponse response,Model model) {
List<User> allUser = service.getAllUser();
model.addAttribute(allUser);
return allUser;
}
}
在resource文件下创建applicationContext.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"
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 ">
<!-- 导入dubbo配置文件 -->
<import resource="applicationContext-dubbo-consumer.xml" />
<!-- 导入mvc配置文件 -->
<import resource="applicationContext-mvc.xml" />
</beans>
创建applicationContext-dubbo-consumer.xml
dubbo的引入十分简单,注意注册的id和这边的id要相同
<?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">
<dubbo:application name="dubboweb"/>
<dubbo:registry address="localhost:2181" protocol="zookeeper"/>
<dubbo:reference id="userService" interface="fun.whmy.dubboinerface.userService" />
</beans>
创建applicationContext-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"
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
http://www.springframework.org/schema/context/spring-context.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
<mvc:annotation-driven/>
<context:component-scan base-package="fun.whmy.dubboweb"/>
<!-- 配置过滤器 配置静态资源 -->
<mvc:resources location="/images/" mapping="/images/**"/>
<mvc:resources location="/js/" mapping="/js/**"/>
<mvc:resources location="/css/" mapping="/css/**"/>
<!-- 4.定义跳转文件的前缀和后缀,视图view的配置 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
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>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</init-param>
<!-- 4.加载次数的配置 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/index</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index</welcome-file>
</welcome-file-list>
</web-app>
这时候服务消费的基本代码已经完成了
4.启动dubbo
注意消费者和提供者要用两个tomcat服务器启动,因为在同一个tomcat启动,不知道是消费者先启动还是提供者先启动,如果消费者先启动则会因为找不到服务而报错
启动两tomcat时注意要写两个不同的端口我这里的提供者是8080 而消费者是8081,注意tomcat里面的一共有三个端口号需要修改,都不能重复,最好一个默认一个为默认+1
注意启动顺序:先启动提供者再启动消费者
在浏览器输入http://localhost:8081/dubboweb/getall
访问成功!至此dubbo的简单web服务器搭建就完成了