dubbo配置zookeeper(血泪史)
0. 启动远程调用顺序
(1)启动注册中心(这里我采用zookeeper)
(2)启动生产者(Dubbo框架的下的生产者)
(3)启动消费者(Dubbo框架的下的消费者)
1. 本机安装zookeeper
直接官网安装zookeeper,我的版本是3.8.3(一定是已经编译过的二进制bin文件包)
zookeeper(windows版)下载传送门
注意:
- 先启动服务端(zkServer.cmd),再启动客户端(zkCli.cmd)
- 启动zkServer.cmd可能会出现一闪而过
操作:修改zkServer.cmd文件
- 启动zkServer.cmd,出现**“Zookeeper audit is disabled”**
操作:修改zkServer.cmd的一处地方(两侧都要有空格哈)
- 安装小寄巧
不要安装在中文路径!!!(要不然是真的寄!)
检验zookeeper启动成功:
(1)查看端口2181(zookeeper的默认端口)
netstat -ano | findstr "2181"
(2)查看服务端cmd窗口日志
(3)查看客户端cmd窗口日志
2. 使用Dubbo框架
官网
当然,肯定不是直接给你官网链接,就完事了。毕竟能够运行官网demo,离成功似乎还挺远的(不要问为什么呜呜呜)如果你要运行demo,建议直接拉取下图的代码就好了,其他的可以不用。
生产者:
(1)生产者需要的依赖
<!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>3.1.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-dependencies-zookeeper -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<version>3.1.3</version>
<type>pom</type>
<exclusions>
<exclusion>
<groupId>slf4j-log4j12</groupId>
<artifactId>org.slf4j</artifactId>
</exclusion>
</exclusions>
</dependency>
(2)配置文件
dubbo:
application:
name: 自己项目的根目录名
protocol:
name: dubbo
port: -1
registry:
address: zookeeper://${zookeeper.address:127.0.0.1}:2181
(3)(复制官网demo中生产者)代码
package com.yupi.springbootinit.provider;
public interface DemoService {
String sayHello(String name);
}
package com.yupi.springbootinit.provider;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.stereotype.Component;
@DubboService(interfaceClass = DemoService.class)
@Component
public class DemoServiceImpl implements DemoService {
@Override
public String sayHello(String name) {
return "Hello " + name;
}
}
消费者:
(1)消费者需要的依赖
顺便说一句,不知道为什么消费者和生产者的依赖不同,但是就是可以!(搞的dubbo版本一个是三,一个是二)
<!-- Dubbo Spring Boot Starter -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.3</version>
</dependency>
<!--引入zookeeper客户端管理工具-->
<!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
<!--日志会冲突~-->
<!--引入zookeeper-->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>2.12.0</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.14</version>
<!--排除这个sLf4j-Log4j12-->
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
(2)配置文件
dubbo:
application:
name: spring-gateway
registry:
address: zookeeper://${zookeeper.address:127.0.0.1}:2181
(3)(复制官网demo中消费者)代码
消费者主函数:
package com.yupi.springgateway;
import com.yupi.springbootinit.provider.DemoService;
import org.apache.dubbo.config.annotation.Reference;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
@SpringBootApplication
@EnableDubbo
public class SpringGatewayApplication {
@Reference(check = false)
private DemoService demoService;
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(SpringGatewayApplication.class, args);
SpringGatewayApplication application = context.getBean(SpringGatewayApplication.class);
String result = application.doSayHello("world");
System.out.println("result:" + result);
}
public String doSayHello(String name){
return demoService.sayHello(name);
}
}
DemoService代码:
package com.yupi.springbootinit.provider;
public interface DemoService {
String sayHello(String name);
}
注意!!!
这里是个巨坑!你必须保持生产者和消费者的在项目的路径名保持一致,如图所示
生产者:
消费者:
都必须是:com.yupi.springbootinit.provider.DemoService,要不然当生产者注册进去了zookeeper,让消费者在zookeeper找生产者给找不到了!
建议:下载一个zookeeper可视化软件,能够容易清晰查看生产者是否注册进去了zookeeper,我采用的是PrettyZoo。
下载链接 直接使用win.msi 不用编译直接无脑下载即可
效果:
等了这个helloworld 太心酸了!!!(完结撒花~,泪崩)
最后
如果你还是搞不定,不妨再坚持一下,要么就换注册中心,用nacos(平替方案)
中途遇到太多问题了,都没来的及截图,这里给出我一路参考的比较有用的文章,希望可以帮助到你一些。
ZooKeeper启动错误:ZooKeeper audit is disabled
(八)Dubbo常见的错误总结
Windows下Zookeeper启动zkServer.cmd闪退问题的解决方案
java.lang.NoClassDefFoundError: org/apache/curator/framework/CuratorFrameworkFactory