<番外篇>spring-cloud Hoxton.SR2版 服务注册与发现--zookeeper搭建以及远程调用(openfeign)使用_java zookeeper+openfegin_葵花下的獾的博客-程序员宅基地

技术标签: springcloud  

<番外篇>spring-cloud Hoxton.SR2版 服务注册与发现–zookeeper搭建以及远程调用(openfeign)使用


本地项目的基础环境

环境 版本
jdk 1.8.0_201
maven 3.6.0
Spring-boot 2.2.4.RELEASE
Spring-cloud Hoxton.SR2
zookeeper 3.5

1、zookeeper的搭建

1.1、linux环境下搭建

详细搭建,可以参考

《linux下安装zookeeper》

《zookeeper在linux下的集群搭建》

1.2、docker搭建

为了简单方便的快速搭建,本次使用的zookeeper,将使用docker搭建;

spring-cloud 版本使用的Hoxton.SR2;对应的zookeeper版本jar包为zookeeper-3.5.3-beta.jar;docker下载的版本为3.5;

如果在搭建过程中,出现一些报错信息,也可以检查下zookeeper的jar包以及对应的版本的问题;

1、下载docker的zookeeper镜像对应的版本;

docker pull zookeeper:3.5

2、创建一个zookeeper镜像的容器,并启动

docker run --name zookeeper_01 -p 2181:2181 --restart always -d zookeeper:3.5

3、查看zookeeper容器启动情况

docker ps

具体的可以参考《docker-hub》;上面也有具体的docker-compose脚本,启动集群的方式等;

2、项目搭建–服务的提供者badger-spring-cloud-zk-api

2.1、maven的pom文件如下:主要spring-cloud-starter-zookeeper-discovery这个包

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.4.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.badger</groupId>
    <artifactId>badger-spring-cloud-zk-api</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>badger-spring-cloud-zk-api</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
        <spring-cloud.version>Hoxton.SR2</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

2.2、springboot主类如下

@SpringBootApplication
@EnableDiscoveryClient
public class ZookeeperApiApplication {
    

    public static void main(String[] args) throws Exception {
    
        SpringApplication.run(ZookeeperApiApplication.class, args);
    }
}

@EnableDiscoveryClient注解:是开启自动注册;

2.3、controller业务类

@RestController
public class DemoController {
    

    @Value("${server.port}")
    String port;

    @Value("${spring.cloud.client.ip-address}")
    String address;

    @GetMapping("/zk/demo")
    public String demo() {
    
        return "我的地址是-->" + address + ":" + port;
    }
}

2.4、application.yml配置文件如下

server:
  port: 7000
spring:
  application:
    name: badger-spring-cloud-zk-api
  cloud:
    zookeeper:
      connect-string: 127.0.0.1:2181
      discovery:
        enabled: true
        register: true

更详细的配置内容可以参考org.springframework.cloud.zookeeper.discovery.ZookeeperDiscoveryProperties.class配置类;

3、项目搭建–服务的调用者badger-spring-cloud-zk-openfeign

3.1、maven的pom文件如下:同样需要spring-cloud-starter-zookeeper-discovery这个包

当前案例,主要演示使用openfeign作为远程调用;单独使用ribbon调用就不再单独演示了;

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.4.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.badger</groupId>
    <artifactId>badger-spring-cloud-zk-openfeign</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>badger-spring-cloud-zk-openfeign</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
        <spring-cloud.version>Hoxton.SR2</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

3.2、springboot主类如下

@SpringBootApplication
@EnableFeignClients
@EnableDiscoveryClient
public class ZookeeperOpenfeignApplication {
    

    public static void main(String[] args) throws Exception {
    
        SpringApplication.run(ZookeeperOpenfeignApplication.class, args);
    }

}

需要加 @EnableDiscoveryClient注解,把当前服务注册到注册中心中

3.3、openFeign远程调用的接口

/**
 * feign接口 指定调用哪个接口 
 * 注解:@FeignClient 标注为feign接口 value 指向调用的模块名
 * spring boot 2.0 只有一个服务端(value = "同一个名字"),只能写一个注解,
 * 可以使用contextId 作为区分,而写多个@FeignClient
 * @author liqi ,
 */
@FeignClient(value = "badger-spring-cloud-zk-api")
public interface DemoFeignApi {
    

    @GetMapping("/zk/demo")
    String demo();
}

注意:@FeignClient(value = "badger-spring-cloud-zk-api");value属性badger-spring-cloud-zk-api

使用Eureka作为注册中心,在注册中,显示的是大写,然后配置的时候,需要大写;

使用zookeeper作为注册中心,在注册中,显示的是小写,那么在配置的时候,也需要小写

3.4、controller业务类

@RestController
public class DemoController {
    
    @Autowired(required = false)
    DemoFeignApi api;

    @GetMapping("/zk/feign/demo")
    public String demo() {
    
        return api.demo();
    }
}

3.5、application.yml配置文件如下

server:
  port: 8000
spring:
  application:
    name: badger-spring-cloud-zk-openfeign
  cloud:
    loadbalancer:
      ribbon:
        enabled: true
    zookeeper:
      connect-string: 127.0.0.1:2181

4、测试

1、启动应用服务的提供者badger-spring-cloud-zk-api端口为7000;

http://localhost:7000/zk/demo

访问结果:我的地址是-->172.16.2.54:7000

2、启动应用服务的调用者badger-spring-cloud-zk-openfeign端口为8000;

http://localhost:8000/zk/feign/demo

访问结果:我的地址是-->172.16.2.54:7000

如果需要负载均衡测试,那么服务提供者,使用不用的端口,多启动几个服务就可以了;

具体代码信息,可以查看《码云》

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

智能推荐

正向代理与反向代理的区别是什么?_weixin_30273763的博客-程序员宅基地

维基百科对「代理服务器」的解释也是让人一头雾水,在计算机世界,代理可分为「正向代理」和「反向代理」,比如著名的FQ软件 *** 就是一款正向代理软件,全世界前1000的高流量网站都在用的 Web 服务器 Nginx 也作为反向代理服务器,那么两者之间究竟有什么区别?我尝试着用浅显易懂的例子把两个概念解释清楚正向代理A同学在大众创业、万众创新的大时代背景下开启他的创业之路,目前他遇到的最大的..._正向*** 反向*** 是啥以及区别

matlab泰勒图,matlab画泰勒图_大雄行为锻炼的博客-程序员宅基地

急 在matlab中写个用泰勒级数计算arctan(x)的方程clear;clc;x=1;s=0;y=atan(x);fori=1:1e6n=2*i-1;s=s+(-(-1)^i)*(x^n)/n;err=y-s;ifabs(err)急 在matlab中写个用泰勒级数计算sin(t)的方程symstf=sin(t);ft=taylor(f,300);ezplot(f)holdonx=-2*pi:0...

filebeat使用笔记_filebeat-oss_zollty的博客-程序员宅基地

filebeat安装命令(for dockerfile rpm) RUN set -eux; \ \ rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch; \ { \ echo '#!/usr/bin/env bash'; \ echo '[elastic-7.x]'; \ echo 'name=El..._filebeat-oss

Axure RP9 一启动就崩溃弹出错误报告_axure一直弹出错误报告_6057的博客-程序员宅基地

Message: HRESULT: [0x80070008], Module: [Unknown], ApiCode: [Unknown/Unknown], Message: 内存资源不足,无法处理此命令。_axure一直弹出错误报告

QT计算器基本功能实现,加减乘除平方根平方_qt sqrt_山有扶苏隰有荷华的博客-程序员宅基地

QT计算器基本功能实现,加减乘除平方根平方,包含建立项目,ui界面,代码实现,运行效果_qt sqrt

ipython和python怎么用_Windows 下面安装和使用Python, IPython NoteBook (详细步骤)-程序员宅基地

1. 下载安装Python下载: python-3.3.3.amd64.msi (救在Python.org下载就好了)安装: 直接双击安装2. 下载安装Setuptools下载ez_setup.py 到某一个目录(如: e:\tools\ez_setup.py), 下载地址: http://www.pip-installer.org/en/latest/installing.html#instal..._windows python get_ipython是在哪个包

随便推点

Flex拓扑图的设计(一)_Arjick的博客-程序员宅基地

不知不觉已经完善这个flex拓扑图已经差不多一年了,一直在投入客户使用实战中,不断地完善,但是还是有很多不足,现在我和大家分享我的一些设计,不方便提供源代码,但是如果遇到实战中遇到困难的朋友可以找我,我会尽力帮的。 首先我们现在展示一个整个拓扑图的版面: 一些比较简单的功能展示: 首先我觉一个一个拓扑在flex中不只是传统的拓扑,传统的拓扑图的功能比较明显: 第一:_flex拓扑图

1027 打印沙漏(C语言)_c语言打印沙漏-程序员宅基地

1027 打印沙漏(C语言)_c语言打印沙漏

艾永亮:要成功进入万亿规模的汽车后市场,打造超级产品至关重要_艾泊宇产品战略的博客-程序员宅基地

对于目前的汽车后市场而言,互联网+汽车的相结合存在着服务不足,过度依赖于资金等问题,而传统线下汽车后市场企业该何去何从,线上汽车后市场能颠覆线下汽车后市场呢?随着人们生活水平的不断提高,汽车已经成为人们日常的标配,私家车越来越多,就我国的汽车数量就高达3.17亿辆,这庞大的汽车保有量也意味着该背后有着巨大的汽车保养市场,等着企业去探索。汽车的保有量和更换率不断地在增加,汽车保养市场的规...

nginx报错(3: The system cannot find the path specified)_c:/data/temp" failed (3: the system cannot find th-程序员宅基地

我是一个小白,最近应公司要求,用nginx映射服务器的多个端口,但总是不成功,尝试了好久都不行,求帮助呀!首先,我将默认的location代理成我的服务器端口,使用 http://服务器ip 访问成功!nginx配置如下:server { listen 80; server_name localhost; lo..._c:/data/temp" failed (3: the system cannot find the path specified)

推荐文章

热门文章

相关标签