当前位置: 首页 > 知识库问答 >
问题:

如何在Eureka Discovery中制作Spring Cloud stubrunner引导寄存器存根?

邹玄裳
2023-03-14

我正试图在运行的Eureka发现服务中注册我的云合同存根,以进行烟雾测试。stubrunner本身已在服务发现中成功注册,但无法按预期访问Stub提供的endpoint。

存根应该取代真正的masterdata微服务(rest apis)。

存根运行器主类:

@SpringBootApplication
@EnableStubRunnerServer
@EnableEurekaClient
@AutoConfigureStubRunner
class EurekaStubRunnerApplication

fun main(args: Array<String>) {
    runApplication<EurekaStubRunnerApplication>(*args)
}

固执的bootstrap.yml

spring:
  application:
    name: masterdata
jhipster:
  registry:
    password: admin

固执的application.yml

eureka:
  client:
    service-url:
      defaultZone: http://admin:${jhipster.registry.password}@localhost:8761/eureka/
    enabled: true
    healthcheck:
      enabled: false
    fetch-registry: true
    register-with-eureka: true
    instance-info-replication-interval-seconds: 10
    registry-fetch-interval-seconds: 10
  instance:
    appname: masterdata
    instance-id: masterdata:${spring.application.instance-id:${random.value}}
    lease-renewal-interval-in-seconds: 5
    lease-expiration-duration-in-seconds: 10
    status-page-url-path: management/info
    health-check-url-path: management/health
ribbon:
  eureka:
    enabled: true
server:
  port: 8888
stubrunner:
  cloud:
    eureka:
      enabled: true
    stubbed:
      discovery:
        enabled: true

启动存根运行程序的命令:

java -jar eureka-stub-runner-0.0.1-SNAPSHOT.jar --stubrunner.ids=com.xetics.mes:masterdata-stubs:+:8081 --stubrunner.stubsMode=LOCAL

启动真正的masterdata服务时,我可以通过正在运行的网关调用apiendpoint:

curl -X GET --header 'Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImF1dGgiOiJST0xFX0FETUlOLFJPTEVfVVNFUiIsImV4cCI6MTU0NjYxMDc2OH0.EF3PHho-B-ayOmmeFrcA90U38cd3AZsU7pA7-9xN0SpuVBvev2sHvejv-FI_FlrwP7qWcCpibW-yWwFDBSUv9w' 'http://localhost:8080/masterdata/api/stations'
[]

存根在存根控件中运行的相同调用:

curl -X GET --header 'Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImF1dGgiOiJST0xFX0FETUlOLFJPTEVfVVNFUiIsImV4cCI6MTU0NjYxMDc2OH0.EF3PHho-B-ayOmmeFrcA90U38cd3AZsU7pA7-9xN0SpuVBvev2sHvejv-FI_FlrwP7qWcCpibW-yWwFDBSUv9w' 'http://localhost:8080/masterdata/api/stations'
{"timestamp":"2019-01-03T16:59:36.426+0000","status":404,"error":"Not Found","message":"No message available","path":"/api/stations"}

虽然,我可以直接调用存根:

curl -X GET --header 'Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImF1dGgiOiJST0xFX0FETUlOLFJPTEVfVVNFUiIsImV4cCI6MTU0NjYxMDc2OH0.EF3PHho-B-ayOmmeFrcA90U38cd3AZsU7pA7-9xN0SpuVBvev2sHvejv-FI_FlrwP7qWcCpibW-yWwFDBSUv9w' 'http://localhost:8081/api/stations'
[{"archiveTime":null,"description":"A fantastic base for building a time machine","id":1985,"maxCapacity":2,"name":"DeLorean DMC 12","icon":"delorean-icon"},{"archiveTime":null,"description":"A handy tool for manipulating the space time continuum","id":2015,"maxCapacity":1,"name":"Flux capacitor"}]

我做错了什么?据我所知,这个问题 https://github.com/spring-cloud/spring-cloud-contract/pull/64,应该可以在Eureka服务器中注册存根,不是吗?

我还阅读了以下文档,但没有成功:

  • https://cloud.spring.io/spring-cloud-contract/1.0.x/#_additional_configuration
  • https://github.com/spring-cloud/spring-cloud-contract/tree/master/spring-cloud-contract-stub-runner

共有1个答案

麻华辉
2023-03-14

此问题是由应用程序的以下错误配置引起的。

...
stubrunner:
  cloud:
    eureka:
      enabled: true
    stubbed:
      discovery:
        # must be false instead of
        enabled: true

此外,我需要添加一个服务映射,因为我的存根工件id是masterdata存根,而要调用的服务id是masterdata。

工作中的application.yml现在看起来像这样:

eureka:
  client:
    service-url:
      defaultZone: http://admin:${jhipster.registry.password}@localhost:8761/eureka/
    enabled: true
    healthcheck:
      enabled: false
    fetch-registry: true
    register-with-eureka: true
    instance-info-replication-interval-seconds: 10
    registry-fetch-interval-seconds: 10
  instance:
    appname: stubrunner
    instance-id: stubrunner:${spring.application.instance-id:${random.value}}
    lease-renewal-interval-in-seconds: 5
    lease-expiration-duration-in-seconds: 10
    status-page-url-path: management/info
    health-check-url-path: management/health
ribbon:
  eureka:
    enabled: true
server:
  port: 8888
stubrunner:
  cloud:
    eureka:
      enabled: true
    stubbed:
      discovery:
        enabled: false
  idsToServiceIds:
    masterdata-stubs: masterdata
 类似资料:
  • 我需要只使用%RAX、%RBX、%RCX、%RDX、%RSI和%RDI(还有%RSP和%RBP)编写像素化汇编代码 GCC编写的程序集代码: 已将%dl更改为%rdx:

  • Vim 可以将不同字段剪切或复制到不同寄存器中,您可以从不同寄存器中取出内容后粘贴 "寄存器名称 按下"键和另一个字符键,便可以定义一个寄存器。例如:"a "1 定义寄存器后直接进行操作 "ayy 将当前行复制到寄存器 a 中 "ap 将寄存器 a 中的内容粘贴到光标之后 :registers 查看所有寄存器的内容 通常情况下,寄存器 + (先按",再按 Shift+= )对应

  • 3、段寄存器的引用 段寄存器是因为对内存的分段管理而设置的。16位CPU有四个段寄存器,所以,其程序可同时访问四个不同含义的段。段寄存器及其偏移量的引用关系如图2.7所示。 段寄存器CS指向存放程序的内存段,IP是用来存放下条待执行的指令在该段的偏移量,把它们合在一起可在该内存段内取到下次要执行的指令。 段寄存器SS指向用于堆栈的内存段,SP是用来指向该堆栈的栈顶,把它们合在一起可访问栈顶单元。另

  • 我想知道如何从ASM指令中提取寄存器值,并将其放入C中的变量中。 例如:移动文档 DWORD PTR DS:[ESI],EDI (假设EDI持有的值为int)int value=EDI;

  • Vim提供了许多寄存器。可以将这些寄存器用作多个剪贴板。使用多个文件时,此功能非常有用。在本章中,将讨论以下主题内容 - 复制寄存器中的文本 粘贴寄存器中的文本 列出可用的寄存器 寄存器类型 1. 复制寄存器中的文本 对于复制,可以使用普通的命令,即并将其存储在寄存器中,可以使用以下语法 - 例如,要复制寄存器中的文本,请使用以下命令 - 2. 粘贴寄存器中的文本 从寄存器粘贴文本 - 例如,下面

  • 当前的Perl 5虚拟机是一台堆栈机器。 它通过将操作保持在堆栈上来传递操作之间的值。 操作将值加载到堆栈上,执行他们需要执行的操作并将结果放回堆栈。 这很容易使用,但速度很慢。 要将两个数字相加,您需要执行三次堆栈推送和两次堆栈弹出。 更糟糕的是,堆栈必须在运行时增长,这意味着在您不想分配内存时分配内存。 因此,Parrot将打破虚拟机的既定传统,并使用寄存器架构,更类似于真实硬件CPU的架构。