Dubbo是在Springcloud的基础上继续开发完成的。
Springcloud | Dubbo |
是基于RestFul风格的微服务技术 | 是基于RPC(远程过程调用协议)的微服务技术 |
是通过Eureka,服务注册中心 | 通过ZooKeep |
有时候需要启动虚拟机 | 一般要用到Linux系统 |
直接运行启动 | 第一步先在Linux系统启动zookeeper。 第二步启动tomcat。 |
Springcloud默认没有自己的界面。但Eureka插件有网页界面。 | Dubbo默认有自己的页面,注册 中心。Zookeeper默认没有自己的 页面 |
第一个Dubbo项目
此项目是Linux虚拟机和IDEA联合完成的。
第一步:导入包
<?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进行配置-->
<!-- 1.给当前项目起个别名 -->
<dubbo:application name="wangxuanbo" />
<!-- 2.把当前Dubbo中服务名。注册到Zookeeper中 -->
<dubbo:registry address="zookeeper://192.168.0.120:2181" />
<!-- 3.给Dubbo程序,分配一个端口号 指的的某个端口网站-->
<dubbo:protocol name="dubbo" port="20880" />
<!-- 4.关联定义的好的接口 -->
<dubbo:service interface="com.dobbo.service.DubboService" ref="demoService" />
<!-- 5.关联接口的实现类 -->
<bean id="demoService" class="com.dobbo.service.Impl.DubboImpl" />
</beans>
第二步:写启动类、接口,接口实现类(现在的接口和实现类都还是伪代码,以后会往里面补充)
此处的启动类和Springcloud启动类不同需要注意
package com.dobbo;
import com.alibaba.dubbo.container.Main;
//启动类
public class Start {
public static void main(String[] args) {
Main.main(args);
}
}
package com.dobbo.service;
//提供者项目测试接口
public interface DubboService {
public void insertInfo();
public void deleteInfo();
public void updateInfo();
public void selectInfo();
}
package com.dobbo.service.Impl;
import com.dobbo.service.DubboService;
public class DubboImpl implements DubboService {
@Override
public void insertInfo() {
}
@Override
public void deleteInfo() {
}
@Override
public void updateInfo() {
}
@Override
public void selectInfo() {
}
}
第三步:和虚拟机进行关联
先补充虚拟机中的文件
1、将zookeeper-3.4.8.jar包放入/usr/local中
2、 在zookeeper中新建data文件夹,做为zookeeper数据存储文件夹。
3、复制zoo_sample.cfg,并给新起名的zoo.cfg
4、在zoo.cfg中改变dataDir中的值 dataDir=/usr/local/zookeeper/data
5、启动效果:
6、打开tomcat文件在里面导入
7、点击bin启动命令行 ./startup.sh & tailf ../logs/catalina.out
8、在etc/sysconfig/iptables里面添加
-A INPUT -m state --state NEW -m tcp -p tcp --dport 20880 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 2181 -j ACCEPT
这是表示开启这两个端口服务。
最后的结果:
以上是提供者
下面来编写消费者项目
1.先创建一个Web版的Maven项目
2.导包
3.创建项目所需要的包+类+接口等
4.创建“消费者项目”的配置文件,
5.运行“提供者项目”,再运行“消费者项目”
导包
<?xml version="1.0" encoding="UTF-8"?>
<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>com.Dubbo</groupId>
<artifactId>Dubbo-consumer</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<!-- 在以下位置引入Dubbo和Zookeeper相关坐标 -->
<dependencies>
<!-- Dubbo -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.3</version>
<!-- 删除Dubbo自带的Spring,避免与其它的SPring包冲突 -->
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Zookeeper(注册中心,相当于Springcloud中Eureka) -->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
<!-- 因为Dubbo自带的SPringJar包,版本过低,所以我们此处需要引入高版本的SPringJar包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
<!--关联提供者项目坐标依赖-->
<dependency>
<groupId>com.Dubbo</groupId>
<artifactId>Dubbo-provider</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<!-- 加载“资源文件夹(resources文件夹)中的配置文件” -->
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
<!-- 配置tomcat插件,本质就是导个tomcat的jar包 -->
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>9092</port>
<path>/Dubbo</path>
</configuration>
</plugin>
</plugins>
</build>
</project>
扫包
扫描实现类中的包
<?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="wangxuanbo"/>
<!-- 在Zookeeper找到已经添加号提供者项目 -->
<dubbo:registry address="192.168.0.120:2181" protocol="zookeeper"></dubbo:registry>
<dubbo:annotation package="com.consumer.biz.impl"/>
</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: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="com.consumer.biz.impl"/>
</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:mvc="http://www.springframework.org/schema/mvc"
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
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 1.扫包 -->
<context:component-scan base-package="com.consumer.action"/>
<!-- 2.加载驱动 -->
<mvc:annotation-driven/>
</beans>
消费者实现类必须要关联到提供者中的方法
package com.consumer.biz.impl;
import com.alibaba.dubbo.config.annotation.Reference;
import com.alibaba.dubbo.config.annotation.Service;
import com.consumer.biz.ConsumerService;
import com.dubbo.service.DubboService;
@Service
public class ConsumerImpl implements ConsumerService {
//拿到提供者项目的接口对象
@Reference //此处必须得用这个注解
private DubboService service;
@Override
public void insertInfoConsumer() {
service.insertInfo();
}
@Override
public void deleteInfoConsumer() {
service.deleteInfo();
}
@Override
public void updateInfoConsumer() {
service.updateInfo();
}
@Override
public void selectInfoConsumer() {
service.selectInfo();
}
}
控制器 跳转界面
package com.consumer.action;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.consumer.biz.ConsumerService;
/**
* 控制层
* @author Lenovo
*
*/
@Controller
public class ConsumerController {
//拿到业务逻辑层的接口对象
@Autowired
private ConsumerService cb;
/**
* 查询方法
*/
@RequestMapping("showInfo")
public String showInfo() {
cb.insertInfoConsumer();
cb.deleteInfoConsumer();
cb.updateInfoConsumer();
cb.selectInfoConsumer();
return "index.jsp";
}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<!-- 加载Spring与Dubbo的配置文件-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:dubbo-*.xml</param-value>
</context-param>
<!-- 监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- SpringMVC前端控制器 -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 字符编码过滤器 -->
<filter>
<filter-name>encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>ok.jsp</welcome-file>
</welcome-file-list>
</web-app>