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

 

 

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

 

整合阿里dubbo服务的项目搭建实战(springboot)

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

建议下载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

 

二、创建生产者

创建项目 dubbo-server

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

<!-- Spring Boot Dubbo 依赖 -->
		<dependency>
			<groupId>io.dubbo.springboot</groupId>
			<artifactId>spring-boot-starter-dubbo</artifactId>
			<version>1.0.0</version>
		</dependency>

		<!-- zookeeper -->
		<dependency>
		<groupId>org.apache.zookeeper</groupId>
		<artifactId>zookeeper</artifactId>
		<version>3.4.6</version>
			<exclusions>
				<exclusion>
					<groupId>org.slf4j</groupId>
					<artifactId>slf4j-log4j12</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

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 方法,查看控制台打印日志可以得到如下结果:

 

三、创建消费者

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中需要手动配置服务地址,来看,好多了
 

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

启动成功!

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

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

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

 

于是我下载了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

发现服务已经注册了,不是服务问题

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

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

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

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值