这里只是简单的整合,先要下载zookeeper,附上链接http://zookeeper.apache.org/releases.html
下载后就能打开zkServer.cmd(window版本,linux是zkServer.sh)
然后再java端建三个项目,也就是服务提供者provider,服务消费者consumer,还有一个接口(个人理解:就是把本来service层拆出来做服务集群,可让服务承载量上去,也可以跨系统进行通信,无需转化json,只需返回对象,也就扯到rpc原理,这样还可以保证服务实现不可见,安全,分布式架构更清晰!)
第一步:建第一个项目 接口层(类似本来的service层)
package com.java.One;
public interface DubboService {
public String dubboTest();
}
第二步:新建第二个项目服务提供者provider(类似之前的serviceimpl)
导入依赖
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.3.3</version>
<exclusions>
<exclusion>
<groupId>com.sun.jmx</groupId>
<artifactId>jmxri</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jdmk</groupId>
<artifactId>jmxtools</artifactId>
</exclusion>
<exclusion>
<groupId>javax.jms</groupId>
<artifactId>jms</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
<dependency>
<groupId>io.dubbo.springboot</groupId>
<artifactId>spring-boot-starter-dubbo</artifactId>
<version>1.0.0</version>
</dependency>
如果有spring-boot-devtools这个包,记得不要用,然后导入之前的接口包
package com.java.two;
import com.alibaba.dubbo.config.annotation.Service;
import com.java.One.DubboService;
@Service
public class DubboServiceImpl implements DubboService{
@Override
public String dubboTest() {
return "great,you can do it";
}
}
建springboot结构的前面文章有,翻下,谢谢!
再application.properties文件添加dubbo注册服务参数
#应用名称,消费者还是提供方
spring.dubbo.application.name=provider
#zk注册中心的地址,如果是多个,用"," 分开
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
#协议类型
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=20880
#dubbo的扫描包,具体是自己引用dubbo的那个bean的位置
spring.dubbo.scan=com.java.two
第三步:最后的消费者consumer(类似controller)
这个项目导入的依赖和服务提供者provider一样
package com.java.Olym.explore.controller;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.alibaba.dubbo.config.annotation.Reference;
import com.java.One.DubboService;
@Controller
@RequestMapping("dubbo")
public class DubboController {
private final Logger log = Logger.getLogger(this.getClass());
@Reference//dubbo注入方式
private DubboService dubboService;
@RequestMapping("train")
public String train(){
log.info(dubboService.dubboTest());
return "yes";
}
}
还有application.properties文件
#dubbo配置
#应用名称,消费者还是提供方
spring.dubbo.application.name=consumer
#zk注册中心的地址,如果是多个,用"," 分开
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
#dubbo的扫描包,具体是自己引用dubbo的那个bean的位置
spring.dubbo.scan=com.java.Olym.explore.controller
还有页面的测试代码,这个页面是在consumer工程类(由远程服务调用者去调用服务提供者,zk起注册中心,集群等作用)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String ctx = request.getContextPath();
String url = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + ctx;
%>
<html>
<head>
<script>
function dubbo(){
location.href = "<%=ctx%>/dubbo/train";
}
</script>
</head>
<body>
<h1>Hello World!</h1>
<div id="dubbo">
<input type="button" value="dubboButton" οnclick="dubbo();">
</div>
</body>
</html>
至此,配置完成,先启动provider的服务,再启动consumer服务。可以观察到zookeeper的黑窗口在注册服务(如果没动就是没弄好,估计是配置参数问题)
zookeeper图太长,没发
页面测试,后端控制台打印
成功!