最近線上consul部署遇到的一些問題,和開發有點區別。還是總結下一些所謂的方法吧。如果大家有好的方法歡迎討論
【1】war包丟到tomcat中註冊不到consul,但是服務是可以訪問的
在本地發開因爲是springboot直接啓動,所以註冊沒問題,通過idea配置外部tomcat運行時還是沒問題。But當我把war信誓旦旦的放到正式服務器上,what?竟然沒有成功。一直註冊不進去,分析了半天發現idea是把編譯文件直接放到了\webapps\ROOT下。爲了驗證我又把ROOT下的對應文件拷到另一個tomcat中竟然註冊成功了(前提是配置文件裏的註冊discover地址要改成和tomcat端口一樣才行)。
所以在服務器的tomcat中修改了對應編譯jar的文件如下:
之後通過寫了shell腳本進行的編譯部署:
(1)先把存在wars包所在項目進行編譯:unzip xxx.war -d 路徑名/xxx
(2)./startup.sh
這樣運行後成功註冊到了consul中
【2】重複註冊服務
線上有個服務重複啓動後發現註冊了兩次,通過修改實例名進行保證實例的唯一性。
server:
port: 8095
number: 1001
spring:
application:
name: xx-service
cloud:
# 使用consul作爲註冊中心
consul:
# 正式環境service模式
host: ${CONSUL_HOST:172.16.56.9}
port: ${CONSUL_PORT:8500}
discovery:
port: ${server.port}
register: true
instance-id: ${spring.application.name}:${server.port}:${server.number}
通過給部署的實例進行編碼拼接到 instance-id中
【3】刪除無效服務
可以通過consul的api進行操作
如果你不知道服務對應的實例id,首先查看下consul的日誌:
通過consul日誌查看具體哪個服務實例有問題,找到對應的id通過命令刪除:
curl -X PUT 'http://xxx:8500/v1/agent/service/deregister/xx-service'
不報錯再看服務就好了。
還要一些其他問題後續再進行更新。。