springboot + dubbo + zookeeper搭建分布式项目

 

 

一、下载zookeeper服务注册管理器

 

springboot + dubbo + zookeeper搭建分布式项目_第1张图片

下载ZooKeeper地址:https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/

springboot + dubbo + zookeeper搭建分布式项目_第2张图片

建议下载zookeeper3.4版本,3.5版本还不稳定。

修改conf目录下zoo_sample.cfg文件名为zoo.cfg

添加如下配置

tickTime=2000
dataDir=/zookeeper/dataDir
dataLogDir=/zookeeper/logs
clientPort=2181

在windows上启动直接进入bin目录中执行./zkServer.sh start启动

linux下安装zookeeper参考:https://www.cnblogs.com/gulang-jx/p/7423564.html

springboot + dubbo + zookeeper搭建分布式项目_第3张图片

 

二、创建生产者

创建项目 dubbo-server

springboot + dubbo + zookeeper搭建分布式项目_第4张图片

pom文件 (生产者及消费者引入相同)


		
			io.dubbo.springboot
			spring-boot-starter-dubbo
			1.0.0
		

		
		
		org.apache.zookeeper
		zookeeper
		3.4.6
			
				
					org.slf4j
					slf4j-log4j12
				
			
		

application.properties

server.port=8081

## Dubbo 服务提供者配置
spring.dubbo.application.name=provider
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=20880
spring.dubbo.scan=com.example.dubbo.service

DubboService

package com.example.dubbo.service;

public interface DubboService {

    String hello(String name);
}

DubboServiceImpl (注意此处@Service 注解标识为 Dubbo 服务)

package com.example.dubbo.service.impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.example.dubbo.service.DubboService;

// 注册为 Dubbo 服务
@Service
public class DubboServiceImpl implements DubboService {

    @Override
    public String hello(String name) {
        String hi = name + ",你好!!!";
        System.out.println("调用服务:" + hi);
        return hi;
    }
}

运行 DemoWebApplication 启动类的 main 方法,查看控制台打印日志可以得到如下结果:

springboot + dubbo + zookeeper搭建分布式项目_第5张图片

 

三、创建消费者

springboot + dubbo + zookeeper搭建分布式项目_第6张图片

pom文件中和上面引入的一样。

application.properties

server.port=8082

## Dubbo 服务消费者配置
spring.dubbo.application.name=consumer
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
spring.dubbo.scan=com.example.dubbo.service

DubboService 跟上面生产者文件一样,建议实际开发将接口单独作为一个项目避免重复代码

UserDubboConsumerService

package com.example.dubbo.service;

import com.alibaba.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Component;

@Component
public class UserDubboConsumerService {

    @Reference
    DubboService service;

    public String hello(String name) {
        String hi = service.hello(name);
        System.out.println(hi);
        return hi;
    }
}

UserController

package com.example.dubbo.controller;

import com.example.dubbo.service.UserDubboConsumerService;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

/**
 * @author: wd
 * @Description: TODO
 * @date 2019/7/2 13:53
 */
@RestController
public class UserController {

    @Resource
    private UserDubboConsumerService service;

    @RequestMapping(value = "hello/{name}",method = RequestMethod.GET)
    public String Hello(@PathVariable String name){
        return service.hello(name);
    }
}

当项目其中的时候,会想zookeeper中查询服务生产者地址,然后直接,调用生产者服务中的服务。zookeeper是提供软负载均衡。比nginx中需要手动配置服务地址,来看,好多了
 

上面服务生产和消费都创建成功了,那么我们启动测试一下

springboot + dubbo + zookeeper搭建分布式项目_第7张图片

启动成功!

打开浏览器  输入http://localhost:8082/hello/wudi

springboot + dubbo + zookeeper搭建分布式项目_第8张图片

此时一个分布式RPC服务框架就测试成功了

踩坑经历:在搭建过程中也碰到诸如@Reference 注解为null的异常等,google了一下结果答案全是雷同,比如什么服务没注册进去、使用容器不同、MVC的注解跟dubbo的注解冲突

springboot + dubbo + zookeeper搭建分布式项目_第9张图片

 

于是我下载了dubbo-admin 

前往github上下载dubbo-admin:https://github.com/apache/incubator-dubbo/tree/dubbo-2.6.0 

新版本中apache-dubbo-2.7.0已经没有dubbo-admin

进入dubbo-admin文件夹,输入cmd,打开dos窗口,输入以下命令:

mvn clean package

在target文件夹下生成 dubbo-admin-0.0.1-SNAPSHOT.jar,进入target执行命令

java -jar dubbo-admin-0.0.1-SNAPSHOT.jar

启动成功后,进入http://localhost:7001/ ,输入账号密码 root,root

springboot + dubbo + zookeeper搭建分布式项目_第10张图片

springboot + dubbo + zookeeper搭建分布式项目_第11张图片发现服务已经注册了,不是服务问题

,最后还是测试得出生产者的接口路径必须要和消费者的接口路径一模一样否则就会空指针。

文章原文:https://blog.csdn.net/qq_34719291/article/details/94550355

没啥时间排版,将就看吧,原创不易,请多包涵。

 

你可能感兴趣的:(分布式,架构)