入门Consul注册、配置中心(代码演示)

news2024/11/15 17:26:10

1、安装与使用

2、注册服务到consul

3、调用consul上注册的服务

4、配置中心

1、安装与使用

官网地址:Install | Consul | HashiCorp Developer

下载对应的系统

解压缩后文件

打开命令行运行

consul.exe agent -dev

即可运行

可以编写一个bat脚本每次运行bat脚本就行,就不用每次cmd敲命令行了

@echo off  

start "" "F:\tool\consul_1.18.2_windows_amd64\consul.exe" agent -dev

记得将路径改为自己的


运行成功后访问可视化控制台地址:localhost:8500

一个实例就是当前的consul服务

正常即表示启动成功

2、注册服务到consul

新建一个maven项目,父项目导入依赖(依赖版本注意对应关系,cloud和springboot版本需对应)

<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>2.2.4.RELEASE</version>
</parent>
<dependencies>
  <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-dependencies</artifactId>
    <version>Hoxton.SR1</version>
    <type>pom</type>
    <scope>import</scope>
  </dependency>
</dependencies>

新建子项目service-provider

导入依赖

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

配置application.yml文件

spring:
  application:
    name: service-provider
  cloud:
    consul:
      host: localhost
      port: 8500

      discovery:
        register: true  #是否需要注册
        instance-id: ${spring.application.name}-01 #实例名称(必须唯一)
        service-name: ${spring.application.name} #服务名称
        port: ${server.port}  #服务端口
        prefer-ip-address: true #是否使用ip注册服务
        ip-address: ${spring.cloud.client.ip-address} #请求服务ip地址
server:
  port: 7070

ProductController

@RestController
public class ProductController {
    @Autowired
    private ProductService productService;

    @GetMapping("get")
    public Product get(){
        Product products = productService.selectProduct();
        return products;
    }
}

ProductService

public interface ProductService {
    Product selectProduct();
}

ProductServiceImpl

@Service
public class ProductServiceImpl implements ProductService {
    @Override
    public Product selectProduct() {
        return new Product(1,"手机",200,1999.0);
    }
}

Product

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Product implements Serializable {

    private Integer id;

    private String productName;

    private Integer productNum;

    private Double productPrice;
}
@SpringBootApplication
public class ProviderApplication {
    public static void main( String[] args ){
        SpringApplication.run(ProviderApplication.class, args);
    }
}

启动项目   访问测试接口成功

 启动成功后查看localhost:8500

这个就是我们配置的。点进去service-provider-01是我们配置的instance-id

service-name: ${spring.application.name} #服务名称

3、调用consul上注册的服务

在第二步我们将service-provider注册到了consul上,接下来我们写个模块来调用他

新建service-consumer模块

pom.xml

<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-discovery</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

application.yml

server:
  port: 9090
spring:
  application:
    name: service-consumer
  cloud:
    consul:
      host: localhost
      port: 8500
        
      discovery:
        register: false  #是否需要注册,false不用注册到consul上

OrderController

@RestController
public class OrderController {

    @Autowired
    private OrderService orderService;

    @GetMapping("/{id}")
    public Order selectOrder(@PathVariable("id") Integer id){
        return orderService.selectOrderById(id);
    }

}

OrderService

public interface OrderService {

    Order selectOrderById(Integer id);
}

OrderServiceImpl(调用地址:http://service-provider/get)

@Service
public class OrderServiceImpl implements OrderService {

    @Autowired
    private RestTemplate restTemplate;


    @Override
    public Order selectOrderById(Integer id) {
        return new Order(id, "order-001", "中国", 100D,
                selectProductListByLoadBalancer());
    }
    
    //发起请求去调用service-provider模块
    private Product selectProductListByLoadBalancer(){
        ResponseEntity<Product> response = restTemplate.exchange(
                "http://service-provider/get",
                HttpMethod.GET,
                null,
                new ParameterizedTypeReference<Product>() {
                });
        Product body = response.getBody();
        return body;
    }
}

Order

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Order {

    private Integer id;
    private String orderNo;
    private String orderAddress;
    private Double orderPrice;
    private Product product;
}

Product

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Product {

    private Integer id;

    private String productName;

    private Integer productNum;

    private Double productPrice;
}
@SpringBootApplication
public class App {
    public static void main( String[] args ){
        SpringApplication.run(App.class, args);
    }

    //远程调用
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

启动项目  访问localhost:9090/1        测试一下

我们可以看到通过调用http://service-provider/get已经成功获取到了数据

4、配置中心

我们用service-provider模块举例        (测试从consul上获取端口和自定义参数)

给service-provider模块新加两个依赖(consul配置中心和bootstrap的读取)

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-consul-config</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
            <version>3.1.3</version>
        </dependency>

将之前的application.yml改为bootstrap.yml。因为bootstrap优先级比application高

bootstrap.yml

spring:
  application:
    name: service-provider
  cloud:
    consul:
      host: localhost
      port: 8500

      discovery:
        register: true  #是否需要注册
        instance-id: ${spring.application.name}-01 #实例名称(必须唯一)
        service-name: ${spring.application.name} #服务名称
        port: ${server.port}  #服务端口
        prefer-ip-address: true #是否使用ip注册服务
        ip-address: ${spring.cloud.client.ip-address} #请求服务ip地址
      config:
        enabled: true     #是否开启配置中心
        format: yaml      #配置文件格式,这里用的yaml
        profile-separator: "-"  #例如: service-provider和dev中间的符号 用-就是service-provider-dev
        data-key: data    #默认的值就是data  是config的key  写上方便阅读
        prefix: config    #默认的值就是config   是配置的前缀  写上方便阅读
  profiles:
    active: dev

我们没有配置这个项目的端口号,从consul上获取

打开控制台配置文件新建

为啥这样命名?因为consul中默认前缀就是config,默认后面的key就是data。得加

test.num用来测试动态刷新

重新启动项目

可以看到使用7070端口启动,成功从consul上获取到了端口

我们再来测试一下动态获取配置数据

@RestController
@RefreshScope    //动态刷新获取,如果不加修改获取不到最新的
public class ProductController {

    @Autowired
    private ProductService productService;

    //获取测试的数据
    @Value("${test.num}")
    private String num;

    @GetMapping("get")
    public Product get(){
        Product products = productService.selectProduct();
        return products;
    }

    //测试的方法
    @GetMapping("test")
    public String test(){
        return num;
    }
}

重新启动  调用localhost:7070/test

获取成功,测试动态获取                修改num的值

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1793735.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C# MQTTNET 服务端+客户端 实现 源码示例

目录 1.演示效果 2.源码下载 3.服务端介绍 4.客户端介绍 1.演示效果 2.源码下载 下载地址&#xff1a;https://download.csdn.net/download/rotion135/89385802 3.服务端介绍 服务端用的控制台程序进行设计&#xff0c;实际使用可以套一层Windows服务的皮&#xff0c;进…

了解一下Ubuntu Linux

1.3.1 什么是Ubuntu Ubuntu这个名字非常神奇&#xff0c;它取自非洲南部祖鲁语的ubuntu&#xff0c;是一个哲学名称&#xff0c;其意思为“人性”或者“我的存在是因为大家的存在”。对于中国人来说&#xff0c;一般称呼它为乌班图。 Ubuntu是在Debian的基础上开发出来的&am…

在Win10安装MySQL环境以及更改相关配置---附带每一步截图

下载MySQL数据库 MySQL官网链接 选择合适自己的版本&#xff0c;这里我选择5.7.17&#xff0c;选择安装包大的那一个&#xff0c;这个是离线安装&#xff0c;下载到本地后进行安装。 选择“No thanks&#xff0c;just start my download.”即进入下载状态。 安装 运行安…

SpringBoot+Vue房产销售网站(前后端分离)

技术栈 JavaSpringBootMavenMySQLMyBatisVueShiroElement-UI 角色对应功能 用户销售经理管理员 功能截图

Javascript系统学习(三)

前端模块化前端模块化CommonJS、AMD、CMD、ES6_commonjs amd cmd es6模块化-CSDN博客 ES6: <script type"module" src"main.js"></script> //默认导出 export default function(ctx) {... } ----------------------------------- //模块命名…

史上最走心midjourney教程多案例咒语注意点

一 &#xff1a;什么是Midjourney &#xff1f;&#xff08;文末附 MidJourney 知识库&#xff0c;从注册到使用教程还有高阶技巧应有尽有。&#xff09; Midjourney是一个由同名研究实验室开发的人工智能程式&#xff0c;可根据文本生成图像&#xff0c;于2022年7月12日进入公…

Linux 僵尸进程和孤儿进程

一.Z(zombie)-僵尸进程 1.僵死状态&#xff08;Zombies&#xff09;是一个比较特殊的状态。当进程退出并且父进程&#xff08;使用wait()系统调用后&#xff09;没有读取到子进程退出的返回代码时就会产生僵死(尸)进程 2.僵死进程会以终止状态保持在进程表中&#xff0c;并且会…

神经网络 torch.nn---Containers

torch.nn — PyTorch 2.3 documentation torch.nn - PyTorch中文文档 (pytorch-cn.readthedocs.io) nn是Neural Network的简称&#xff0c;帮助程序员方便执行如下的与神经网络相关的行为&#xff1a; &#xff08;1&#xff09;创建神经网络 &#xff08;2&#xff09;训练…

matlab(实例):滤波器(低通、带通、高通,使用butter函数、filter函数)

一、题目&#xff1a;已知一个时域信号&#xff0c;包含三个频率&#xff08;50Hz、150Hz、300Hz&#xff09;&#xff0c;分别设计并使用低通滤波器、带通滤波器、高通滤波器&#xff0c;对其进行滤波&#xff0c;画出滤波信号的时域图和频谱图。 二、解题过程&#xff1a; ①…

HQChart小程序教程4-动态控制手势滚动页面

动态控制手势滚动页面 示例效果canvas 控制页面滚动属性步骤1. 使用变量绑定disable-scroll2. 在手势处理函数中控制是否滚动页面 交流QQ群HQChart代码地址 示例效果 canvas 控制页面滚动属性 根据官方文档&#xff0c;disable-scroll 属性是控制画布手势是否可以滚动页面。 h…

一线教师教学工具汇总

亲爱的教师们&#xff01;我们的教学工具箱里也该更新换代啦&#xff01;今天&#xff0c;就让我来给大家安利一波超实用的教学神器&#xff1a; 百度文库小程序 —— 在线图书馆 百度文库&#xff0c;一个宝藏级的在线文档分享平台&#xff01;在这里&#xff0c;你可以找到海…

YashanDB携手宏杉科技助力国产软件生态发展

近日&#xff0c;深圳计算科学研究院崖山数据库系统YashanDB与宏杉科技系列存储、系列服务器与数据库一体机等多款产品顺利完成兼容性互认证。经严格测试&#xff0c;双方产品完全兼容&#xff0c;稳定运行&#xff0c;共同提供高效、稳定、安全的国产软硬件一体化解决方案&…

超声波清洗机真的有用吗?四款宝藏超声波清洗机千万别错过

越来越多的人开始依赖眼镜来帮助他们纠正视力问题。然而&#xff0c;眼镜的使用也带来了一些麻烦&#xff0c;其中之一就是如何保持眼镜的清洁和清晰。传统的洗眼镜方法可能效果不佳&#xff0c;甚至可能会划伤镜片。幸运的是&#xff0c;现在有一种新兴的技术可以解决这个问题…

最新一站式AI创作中文系统网站源码+系统部署+支持GPT对话、Midjourney绘画、Suno音乐、GPT-4o文档分析等大模型

一、系统简介 本文将介绍最新的一站式AI创作中文系统&#xff08;集成ChatGPTMidjourneySunoStable Diffusion&#xff09;——「星河易创AI」系统&#xff0c;该系统基于ChatGPT的核心技术&#xff0c;融合了自然语言问答、绘画、音乐、文档分享、图片识别等创作功能&#xf…

ctfshow web web签到--web14

web签到 查看源代码解码即可 web2 SQL注入&#xff0c;我之前是没遇到这种格式的长了新姿势 or 11 union select 1,database(),3 limit 1,2;# or 11 union select 1,(select table_name from information_schema.tables where table_schemaweb2 limit 0,1),3 limit 1,2;# or…

招待宴请、工作餐、加班餐,YonSuite让企业支出餐餐可控

随着企业规模的不断扩大和员工需求的日益多样化&#xff0c;餐饮管理成为了企业日常运营中不可忽视的一环。传统的餐饮管理方式&#xff0c;如员工垫付、手工报销、招待费用高、费用去向不明等&#xff0c;不仅效率低下&#xff0c;而且难以实时掌控支出情况&#xff0c;给企业…

减肥经验分享,坚持好的习惯。

今天早上看到一篇丁香医生的液断减肥&#xff0c;看到评论&#xff0c;很多人都觉得减肥很难&#xff0c;都在常年减肥&#xff0c;于是想给大家分享一下我的减肥经验。 目录 一 自我介绍 二 减肥四个阶段 第一阶段 少吃主食 第二阶段 不吃主食 第三阶段 黄瓜鸡蛋 第四阶…

HTML开发 Vue2.x + Element-UI 动态生成表单项并添加表单校验

基于vue2.x 和element-ui 动态生成表单项并添加表单校验&#xff1b; 1、需求问题 如下图&#xff0c;项目有个需求&#xff0c;点击添加按钮&#xff0c;新增一行设备信息&#xff0c;且每项信息必填&#xff1b; 2、代码 看到这个需求&#xff0c;首先想到要使用v-for的形…

python 巡检报告中的邮件处理

00.创作背景,在每天的巡检报告中要 要检查oa相关服务器的备份作业是否备份成功 那个备份软件有个功能&#xff0c;就是完成备份作业后&#xff0c;可以发送信息到我的邮箱。 01.通过检查我邮箱的信息&#xff0c;就可以了解那个备份作业的情况。 通过解释邮件的名称可以了解备…

618大促该买哪些数码好物?数码好物选购清单来啦,闭眼不踩坑!

618年中大促&#xff0c;无疑是一场数码爱好者的盛宴&#xff0c;在这个时刻&#xff0c;各大品牌和商家纷纷推出超值优惠&#xff0c;让众多心仪的数码产品以历史最低价呈现在消费者面前。面对如此丰富的选择&#xff0c;你是否也在犹豫哪些数码好物值得在这个节点入手呢&…