微服务中BUS动态刷新全局广播时的问题

146 阅读2分钟

最近在跟着网上的课程学习springcloud微服务,到了消息总线Bus这里了,这方面的知识网上很多,我不再赘述,这里提一个我遇到了小bug。

这个原理很好理解,我先是配置了3344端口作为服务端的监听,3355和3366作为客户端,主要原理就是3344从托管(一开始用的GitHub,有点慢,后来换成Gitee了)获取配置,通过消息队列(这里使用rabbitmq)形成消息总线通知客户端,从而一次修改,处处生效,如果没有这个消息总线,以前要一个一个重启的,现在可以不重启,在线更新了,只是现在还算是半自动,需要运维人员手工输入指令curl -X POST "http://localhost:3344/actuator/bus-refresh" 课程里是这样说的,但我却出错了。 image.png 后来我又试了curl -Uri "http://localhost:3344/actuator/busrefresh" -Method 'POST'和curl -Uri "http://localhost:3344/actuator/bus-refresh" -Method 'POST'都不行

image.png 后来查阅资料得知应该是现在这个,Invoke-WebRequest -Uri "http://localhost:3344/actuator/bus-refresh" -Method 'POST' -ContentType "application/json"

image.png

原因

一开始使用curl -X POST "http://localhost:3344/actuator/busrefresh"命令时,错误信息是“找不到与参数名称“X”匹配的参数”。这是因为在Windows PowerShell中,curl实际上是Invoke-WebRequest的别名,而Invoke-WebRequest并不支持-X参数。这就是为什么看到这个错误。

然后,使用Invoke-WebRequest -Uri "http://localhost:3344/actuator/bus-refresh" -Method 'POST'命令,但服务器返回了HTTP 415状态码。HTTP 415状态码表示“不支持的媒体类型”,这意味着服务器无法处理请求附带的媒体格式。这通常发生在POST或PUT请求中,当请求的Content-Type头部字段与服务器期望的不匹配时。

为了解决这个问题,需要在请求中包含一个Content-Type头部字段。Content-Type头部字段告诉服务器你正在发送什么类型的数据。例如,如果正在发送JSON数据,可以添加一个"Content-Type: application/json"的头部字段。

所以,最后使用了以下命令:

Invoke-WebRequest -Uri "http://localhost:3344/actuator/bus-refresh" -Method 'POST' -ContentType "application/json"

这个命令向URL http://localhost:3344/actuator/bus-refresh发送了一个POST请求,并在请求中包含了一个"Content-Type: application/json"的头部字段。服务器成功处理了这个请求,并返回了HTTP状态码204。HTTP状态码204表示“无内容”,这意味着服务器成功处理了请求,但没有返回任何内容。