运行环境:JDK 7 或 8,Maven 3.0+
springboot1.5以上,zookeeper3.4.6,版本dubbo 2.5+版本(下面网盘里是2.5.4的)和spring boot整合实现SOA
技术简述:
dubbo 是一个高性能的RPC调用框架,更是SOA服务治理的一种方案
ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务。
当我们接口数庞大,提供的服务越来越来的时候,传统的方式逐渐不适合需求,SOA的服务治理方案就是其中最好的方法之一,可以暴露出 Dubbo 服务接口,提供给 Dubbo 消费者进行 RPC 的调用为我们更好的治理好服务。
百度网盘链接:http://pan.baidu.com/s/1cJcuzs 密码:msdl
安装zookeeper:
tar -zxvf zookeeper-3.4.6.tar.gz
cd zookeeper-3.4.6/conf
复制一份zoo_sample.cfg 文件 并将其命名为zoo.cfg
vi zoo.cfg
tickTime=2000
dataDir=/usr/local/zookeeper/zookeeper-3.4.6/data
dataLogDir=/usr/local/zookeeper/zookeeper-3.4.6/logs
clientPort=2181
配置zookeeper集群加上server.1等等,等号后面是你的ip和取不同的端口号
#server.1=192.168.43.4:3882
#server.2=192.168.43.4:3883
#server.3=192.168.43.4:3884
退出保存好以后
启动zookeeper:
cd zookeeper-3.4.6/bin/
./zkServer.sh start
JMX enabled by default
Using config: /usr/local/zookeeper/zookeeper-3.4.6/bin/../conf/zoo.cfg
Usage: ./zkServer.sh {start|start-foreground|stop|restart|status|upgrade|print-cmd}
看到这样说明zookeeper安装成功,因为这个不是集群,所以是单用户模式(集群以后会说)
安装dubbo:
将网盘里面下载的dubbo-admin-2.5.4.war直接放到tomcat下的webapps/下面
然后将dubbo-admin-2.5.3目录名称改为ROOT
[root@localhost ROOT]# ls
crossdomain.xml dubbo-admin-2.5.4.war images META-INF sv-SE.lnk
css favicon.ico js SpryAssets WEB-INF
vi dubbo.properties
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.admin.root.password=root
dubbo.admin.guest.password=guest
然后启动tomcat服务器,在浏览器上直接输入ip+port
192.168.43.4:8080
这个时候会提示你输入密码,因为刚才我们配置的用户名和密码都是 root
这样我们的dubbo就安装成功了 ,因为我们还没有服务,所以提供者和消费者都没有!!!
springboot:
打开idea,创建maven项目:
服务端目录结构如下:
pom.xml配置如下:
<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> <artifactId>dubbo_server_test</artifactId> <name>dubboServer</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.7</java.version> </properties> <!-- spring-boot-starter-parent包含了大量配置好的依赖管理,在自己项目添加这些依赖的时候不需要写<version>版本号 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.1.RELEASE</version> <relativePath/> </parent>
<!-- 配置依赖 --> <dependencies> <!-- springboot相关 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- Dubbo相关 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <!-- 这里使用最新的2.8.4版本,中央仓库不存在,请自行打入本地仓库 自行更换2.5.3版本--> <version>2.5.3</version> <exclusions> <exclusion> <artifactId>spring</artifactId> <groupId>org.springframework</groupId> </exclusion> </exclusions> </dependency> <!-- zookeeper 第三方操作工具类 --> <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.6</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency> <!-- javassist 字节码类库 --> <dependency> <groupId>org.javassist</groupId> <artifactId>javassist</artifactId> </dependency> </dependencies> <build> <plugins> <!-- 打包项目 mvn clean package --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <dependencies> <!-- mvn spring-boot:run 热部署启动 --> </dependencies> </plugin> </plugins> </build> </project>
providers.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"> <!-- 配置可参考 http://dubbo.io/User+Guide-zh.htm --> <!-- 服务提供方应用名,用于计算依赖关系 --> <dubbo:application name="providers"/> <!-- 定义 zookeeper 注册中心地址及协议 --> <dubbo:registry address="zookeeper://192.168.43.4:2181"/> <!-- 定义 Dubbo 协议名称及使用的端口,dubbo 协议缺省端口为 20880,如果配置为 -1 或者没有配置 port,则会分配一个没有被占用的端口 --> <dubbo:protocol name="dubbo" port="-1"/> <!-- 声明需要暴露的服务接口 --> <!-- <dubbo:service interface="com.jw.dubbo.service.TestService" ref="testService" timeout="10000"/> <!– 和本地 bean 一样实现服务 –> <bean id="testService" class="com.jw.dubbo.service.TestService" />--> <dubbo:annotation package="com.jw.dubbo.service"/>
</beans>
启动类代码如下:
@ImportResource({"classpath:providers.xml"}) @SpringBootApplication public class ServerApplication { public static void main(String[] args) { SpringApplication.run(ServerApplication.class,args); } }
接口类:
public interface TestService {
User sayHello(String name);
}
实体类:
import java.io.Serializable; public class User implements Serializable { private static final long serialVersionUID = -1L; private String username; private Integer age; private String cityName;
实现类:
@Service(version = "1.0.0") public class TestServiceImpl implements TestService { @Override public User sayHello(String name) { return new User("jw",18,"beijin"); }
启动ServerApplication.java
看到这样的就说明成功了 !
现在我们再看dubbo
现在我们可以看到提供者数为1,
现在我们就可以看到服务提供者已经暴露的服务!
消费端目录结构:
application.properties配置如下:
server.port=8081
consumers.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"> <!-- 配置可参考 http://dubbo.io/User+Guide-zh.htm --> <!-- 服务提供方应用名,用于计算依赖关系 --> <dubbo:application name="consumer"/> <!-- 定义 zookeeper 注册中心地址及协议 --> <dubbo:registry address="zookeeper://192.168.43.4:2181"/> <!-- 定义 Dubbo 协议名称及使用的端口,dubbo 协议缺省端口为 20880,如果配置为 -1 或者没有配置 port,则会分配一个没有被占用的端口 --> <dubbo:protocol name="dubbo" port="20880"/> <!-- 声明需要暴露的服务接口 --> <!-- <dubbo:service interface="com.jw.dubbo.service.TestService" ref="testService" timeout="10000"/>--> <dubbo:annotation package="com.jw.dubbo.service"/>
</beans>
启动类:
@ImportResource({"classpath:consumers.xml"}) @EnableAutoConfiguration @SpringBootApplication(scanBasePackages = {"com.jw.dubbo"}) public class ClientApplication { public static void main(String[] args) { ConfigurableApplicationContext run = SpringApplication.run(ClientApplication.class, args); TestConsumerService consumerService = run.getBean(TestConsumerService.class); consumerService.printHello(); } }
实体类和上面的server端一样就不说了
接口类:
public interface TestService {
User sayHello(String name);
}
实现类:
import com.alibaba.dubbo.config.annotation.Reference; import com.jw.admin.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component public class TestConsumerService { @Reference(version = "1.0.0") TestService testService; public void printHello(){ String name = "jw"; User user = testService.sayHello(name); System.out.println("dubbo client:"+user); }
启动CilentApplication.java类
看到控制台打印出:
说明消费端也成功了!!
然后我们再看一下dubbo
消费者数为1
这样我们集成就完成了,如果在使用过程中有什么问题,可以随时留言,可能每一个人的方法可能有些不一样,
但是我们的目的是一样的!