springboot+dubbo+zk_springboot+dubbo2.7+zk +gradle-程序员宅基地

技术标签: 微服务  杂记  1024程序员节  zookeeper  dubbo  springboot  

springboot+dubbo+zk

注意

关于Curator连接Zookeeper对应版本

Versions
The are currently two released versions of Curator, 2.x.x and 3.x.x:
 
Curator 2.x.x - compatible with both ZooKeeper 3.4.x and ZooKeeper 3.5.x
Curator 3.x.x - compatible only with ZooKeeper 3.5.x and includes support for new features such as dynamic reconfiguration, etc.

在这里插入图片描述

正文

目录结构

在这里插入图片描述

dubbo

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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>

    <groupId>com.gohb</groupId>
    <artifactId>dubbo</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>dubbo_api</module>
        <module>dubbo_provider</module>
        <module>dubbo_consumer</module>
    </modules>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.4.RELEASE</version>
    </parent>


    <dependencies>
        <!--springboot 启动器-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <!--lombok依赖-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <!--dubbo springboot启动器-->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.8</version>
        </dependency>
        <!--curator依赖-->
        <!--Curator提供了一套Java类库, 可以更容易的使用ZooKeeper。 -->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>2.12.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>2.12.0</version>
        </dependency>

    </dependencies>


</project>

dubbo_api

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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">
    <parent>
        <artifactId>dubbo</artifactId>
        <groupId>com.gohb</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>dubbo_api</artifactId>


</project>

dubbo_api目录结构
在这里插入图片描述
User

package com.gohb.pojo;

public class User {
    

    private Long id;
    private String name;
    private String password;

    @Override
    public String toString() {
    
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", password='" + password + '\'' +
                '}';
    }

    public Long getId() {
    
        return id;
    }

    public void setId(Long id) {
    
        this.id = id;
    }

    public String getName() {
    
        return name;
    }

    public void setName(String name) {
    
        this.name = name;
    }

    public String getPassword() {
    
        return password;
    }

    public void setPassword(String password) {
    
        this.password = password;
    }
}

UserService

package com.gohb.service;

import com.gohb.pojo.User;

/**
 * 用户服务接口
 */
public interface UserService {
    
    void register(User user);
    User getUserById(Long id);
}

dubbo_provider

dubbo_provider目录结构
在这里插入图片描述

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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">
    <parent>
        <artifactId>dubbo</artifactId>
        <groupId>com.gohb</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>dubbo_provider</artifactId>

    <dependencies>
        <dependency>
            <groupId>com.gohb</groupId>
            <artifactId>dubbo_api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

</project>

application.yml

dubbo:
  registry:
    address: zookeeper://192.168.91.145:2181 # 提供注册中心的访问地址。
  application:
    name: gohb-dubbo-provider # 配置本dubbo的应用名称,名称组成是:字母,数字,'-',字母开头
#  protocol: # 协议,协议自定义配置的时候,所有的默认值失效。
#    name: dubbo # 协议名
#    port: 20880 # 端口,默认20880

UserMapper

package com.gohb.mapper;

import com.gohb.pojo.User;

/**
 * 模拟数据库访问
 */
public interface UserMapper {
    
    void insert(User user);
    User selectById(Long id);
}


UserMapperImpl

package com.gohb.mapper.impl;

import com.gohb.mapper.UserMapper;
import com.gohb.pojo.User;
import org.springframework.stereotype.Repository;

@Repository
public class UserMapperImpl implements UserMapper {
    
    @Override
    public void insert(User user) {
    
        System.out.println("数据库访问:新增用户 - " + user);
    }

    @Override
    public User selectById(Long id) {
    
        User user = new User();
        user.setId(id);
        user.setName("name" + id);
        user.setPassword("password" + id);
        System.out.println("数据库访问:主键查询用户 - " + user);
        return user;
    }
}

UserServiceImpl

package com.gohb.service.impl;

import com.gohb.mapper.UserMapper;
import com.gohb.pojo.User;
import com.gohb.service.UserService;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.beans.factory.annotation.Autowired;

@DubboService(loadbalance = "roundrobin")
public class UserServiceImpl implements UserService {
    

    @Autowired
    private UserMapper userMapper;

    @Override
    public void register(User user) {
    
        System.out.println("UserService 实现类中:注册用户");
        userMapper.insert(user);
    }

    @Override
    public User getUserById(Long id) {
    
        System.out.println("UserService 实现类中:根据id查询用户");
        return userMapper.selectById(id);
    }
}

DbProviderApplication

package com.gohb;

import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * 启动的每个Dubbo应用,一定会在注册中心中注册信息。
 *  * 服务提供者注册的是/dubbo/xxx/providers
 *  * 服务消费者注册的是/dubbo/xxx/consumers
 *  *
 *  * Dubbo启动器(dubbo-spring-boot-starter)默认不生效。
 *  * 必须通过@EnableDubbo让启动器生效。
 *  *
 *  * 在2.7.2- 版本中,部分配置默认不加载,需要使用@EnableDubboConfig让
 *  * 全部配置生效。
 *  *
 *  *
 *  * 负载均衡策略:
 *  *  设置负载均衡策略,可以在@DubboService或者@DubboReference注解上
 *  *  加属性loadbalance进行配置。
 *  *  消费者默认是不考虑负载均衡策略的,是使用提供者定义的负载均衡策略。
 *  *  如果消费者配置了负载均衡策略,则忽略提供者配置的负载均衡策略。
 */
@SpringBootApplication
@EnableDubbo
public class DbProviderApplication {
    
    public static void main(String[] args) {
    
        SpringApplication.run(DbProviderApplication.class,args);
    }
}

dubbo_consumer

dubbo_consumer目录结构
在这里插入图片描述
pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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">
    <parent>
        <artifactId>dubbo</artifactId>
        <groupId>com.gohb</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>dubbo_consumer</artifactId>

    <dependencies>
        <dependency>
            <groupId>com.gohb</groupId>
            <artifactId>dubbo_api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>


</project>

application.yml

dubbo:
  registry:
    address: zookeeper://192.168.91.145:2181
  application:
    name: gohb-dubbo-provider

UserController

package com.gohb.controller;

import com.gohb.pojo.User;
import com.gohb.service.LocalUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {
    

    @Autowired
    private LocalUserService localUserService;

    @RequestMapping("findUser")
    public User findUser(Long id){
    
        return localUserService.getById(id);
    }

    @RequestMapping("registerUser")
    public String register(User user){
    
        localUserService.register(user);
        return "注册用户成功";
    }

    @RequestMapping("hello")
    public String hello(){
    
        return "hello";
    }


}

LocalUserService

package com.gohb.service;

import com.gohb.pojo.User;

/**
 * consumer子Module的本地Service
 */
public interface LocalUserService {
    
    void register(User user);
    User getById(Long id);
}

LocalUserServiceImpl

package com.gohb.service.impl;

import com.gohb.pojo.User;
import com.gohb.service.LocalUserService;
import com.gohb.service.UserService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.stereotype.Service;


@Service
public class LocalUserServiceImpl implements LocalUserService {
    

    /**
     * 远程服务的接口。通过注解@DubboReference实现动态代理创建
     * 规则:
     * 1、 通知Dubbo框架,根据配置找注册中心,发现服务的地址。
     *    拿接口名称作为zookeeper中节点的命名规则,获取地址。
     * 2、 通知Spring,根据Dubbo框架的特性,创建接口的动态代理对象,并维护
     *    在Spring容器中。
     * 3、 类似@Autowired,把代理对象注入到当前的变量中。
     */
    @DubboReference
    private UserService userService;

    @Override
    public void register(User user) {
    
        System.out.println("准备调用远程服务,服务对象类型是:" + userService.getClass().getName());
        System.out.println("注册的用户是: " + user);
        userService.register(user);
    }

    @Override
    public User getById(Long id) {
    
        System.out.println("根据主键查询用户,主键是: " + id);
        return userService.getUserById(id);
    }
}

DbConsumerApplication

package com.gohb;

import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication(scanBasePackages = ("com.gohb.*"))
@EnableDubbo
public class DbConsumerApplication {
    
    public static void main(String[] args) {
    
        SpringApplication.run(DbConsumerApplication.class,args);
    }
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_39682037/article/details/109253014

智能推荐

Python快速安装dlib库,无需安装CMake,Boost等_import dlib报错 (python引入库)-----无需安装cmake和boost-程序员宅基地

文章浏览阅读1.2k次,点赞2次,收藏7次。安装dlib一直有很多苦恼,这是我看到的一篇文章。转载于:https://www.cnblogs.com/AdaminXie/p/9032224.htmlWindows 下在 Python (Anaconda) 中安装 Dlib 库Dlib 的安装Dlib 下载:dlib-19.7.0-cp36-cp36m-win_amd64.whl在 Anaconda Prompt 中先利用 ‘cd’ 命令定位到 Dlib 的 whl 文件 所在路径,‘dir’ 命令可以查看当前路径下的文件;然后 pip _import dlib报错 (python引入库)-----无需安装cmake和boost

DeepFM升级版XDeepFM模型_xdeepfm模型简介-程序员宅基地

文章浏览阅读789次,点赞3次,收藏5次。本文参考自 推荐系统遇上深度学习(二十二)--DeepFM升级版XDeepFM模型强势来袭!,在学习原文的基础上加入一些个人的理解和整理。1、引言对于预测性的系统来说,特征工程起到了至关重要的作用。特征工程中,挖掘交叉特征是至关重要的。交叉特征指的是两个或多个原始特征之间的交叉组合。例如,在新闻推荐场景中,一个三阶交叉特征为AND(user_organization=msra,item_c..._xdeepfm模型简介

R语言gganimate动态图_r语言做动态图-程序员宅基地

文章浏览阅读5.7k次,点赞2次,收藏21次。library(gapminder)library(dplyr)library(gganimate)gapminder %>% ggplot(aes(x = gdpPercap, y = lifeExp, size = pop, color = continent)) + geom_point() + scale_x_log10() + transition_m..._r语言做动态图

UE4 鼠标控制actor旋转_ue4鼠标控制物体旋转移动-程序员宅基地

文章浏览阅读6.5k次,点赞3次,收藏25次。物体Tick事件转动,初始不动则Rotate 都为0,关卡蓝图里边鼠标左键事件,鼠标点击和释放的位置做减法 并设置目标的Rotate属性,Clamp做速度控制.不知道其他有没有好的办法,项目需要没找到相关案例 临时写的..._ue4鼠标控制物体旋转移动

Android 应用开发基础总结_android开发-程序员宅基地

文章浏览阅读833次。Android Studio:Android Studio 是目前最流行的 Android 开发工具,掌握 Android Studio 的功能、配置、使用方法等,有助于提高开发效率、降低开发成本。Java 编程语言:Java 是 Android 应用开发的基础编程语言,需要掌握 Java 中的基础语法、数据类型、运算符、条件语句、循环语句、数组等基础知识。布局和控件:Android 应用的布局和控件是应用程序的基础,掌握 Android 布局文件、控件的种类、属性和样式等方面,是应用开发的必要基础。_android开发

2024年Android社招面试题,百度、阿里、滴滴、新浪的面试心经总结-程序员宅基地

文章浏览阅读984次,点赞30次,收藏14次。最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上相关的我搜集整理的24套腾讯、字节跳动、阿里、百度2019-2021面试真题解析,我把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包知识脉络 + 诸多细节。还有高级架构技术进阶脑图、Android开发面试专题资料帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。

随便推点

spring cloud服务报错feign.RetryableException: Connection refused-程序员宅基地

文章浏览阅读1w次,点赞3次,收藏6次。在服务器上部署微服务的时候,框架是eureka,feign,zull等,出现一下错误信息:Caused by: feign.RetryableException: Connection refused (Connection refused) executing GET http://xxx-server/api/v1/cunchu/bucket/exist?bame=server-abc搜索网上教程:https://github.com/spring-cloud/spring-.._feign.retryableexception: connection refused

解决Could not autowire. No beans of 'xxx' type found.报错_could not autowire. no beans of 'socket' type foun-程序员宅基地

文章浏览阅读1.3w次,点赞10次,收藏11次。could not autowire. No beans of ' xxxx ' type found这个问题算经常遇到,至于怎么解决,我百度了下,百分之90的人都说的是直接修改IDEA报错级别,不过个人认为【这旁门左道,简直是误人子弟】故亲测......出现问题时:解决方案:方法1:在mapper文件上加@Repository注解,这是从spring2.0新增的一个注解,用于简化..._could not autowire. no beans of 'socket' type found.

qt 预言家 翻译_qt的预言家翻译-程序员宅基地

文章浏览阅读1.1k次。虽然时间已过去很久,但我还是要回复一下,因为我找到了解决方法,希望能对其他人有帮助。问题的原因在于:QTextEdit中使用的对象QWidgetTextControl中的复制、粘贴等右键菜单选项在qt_zh_CN.qm中没有被翻译。解决方法:打开qt-everywhere-opensource-src-5.2.0\qtbase\src\widgets目录,用Qt Creator打开widg_qt的预言家翻译

【PHM】PHM算法与智能分析技术——数据处理与特征提取方法1_时域特征提取_phm建模方法论之 数据特征提取-程序员宅基地

文章浏览阅读1w次,点赞12次,收藏107次。PHM算法与智能分析技术——数据处理与特征提取方法1数据预处理目标数据预处理常用方法本系列来自于北京天泽智云科技有限公司的PHM算法与智能分析技术公开课,内容非常有助于研究者对PHM的理解和学习,因此整理为文字版,方便阅读和笔记。公开课视频地址本堂课的主要介绍数据处理的宏观的目标,就是要降低工业场景中建模的3B问题,然后介绍一些常见的数据处理的方法,包括工矿分割数据清洗,针对运动数据的..._时域特征提取_phm建模方法论之 数据特征提取

2021-01-28_sudo apt-get install bc tree-程序员宅基地

文章浏览阅读51次。树莓派高阶课程3:Linux内核源码目录树扫盲分析,配置Linux内核适合树莓派相关操作及内核编译,移植一,Linux内核源码目录树扫盲分析:1 sudo apt-get install treetree //查看目录树大约1.3w个C文件:1100w行代码Linux是开源,免费,Linux开源社区工作者共同维护Linux是一个开源的,支持多架构多平台代码,可移植性非常高但是Linux内核编译出来一般就几M ----4M因为支持多平台多架构,所以编译之前要配置,配置成适合的目标平台来用平台:A_sudo apt-get install bc tree

LWJGL显示一 显示_lwqlog-程序员宅基地

文章浏览阅读1.2k次。LWJGL基础1(显示)介绍LWJGL库使用它自己的轻量级本地窗口(显示),并有其自己的输入系统。 这提供了一种创建快速,小范围内,可借鉴,可实现低延迟的输入现代游戏的一个坚实的基础。LWJGL显示类 Display 是 LWJGL中最重要的一个类。 它创建和控制本地窗口上呈现所有图形内容。显示Display 类有3种方法是应该知道的,即:create(_lwqlog

推荐文章

热门文章

相关标签