1. 程式人生 > 其它 >Dubbo協議埠的介紹--記一次踩坑

Dubbo協議埠的介紹--記一次踩坑

Dubbo協議埠的介紹

dubbo框架一共支援9種協議。其中,預設的,也是最常用的,那就是dubbo協議。

既然是網路協議,那麼,必然要有埠號。

所以,在使用dubbo協議暴露服務時,需要配置dubbo埠。

dubbo協議的預設埠是20880。

springboot配置:

dubbo:
  application:
    name: omsbase-provider
  registry:
    address: zookeeper://192.168.40.84:${embedded.zookeeper.port}
#    address: zookeeper://127.0.0.1:2181
  protocol:
    name: dubbo
    port: 20888

一個應用程式啟動後,dubbo即開啟埠偵聽請求。

linux伺服器上檢視dubbo埠:

[root@chuxing-service ~]# netstat -tunpl|grep 20880
tcp6       0      0 :::20880                :::*                    LISTEN      16074/java          
[root@chuxing-service ~]# netstat -tunpl|grep 2088*
tcp6       0      0 :::20880                :::*                    LISTEN      16074/java          
tcp6       0      0 :::20881                :::*                    LISTEN      15588/java          
tcp6       0      0 :::20888                :::*                    LISTEN      6983/java

通過各個dubbo埠對應的pid,我們來看看相應的主程序應用:

[root@chuxing-service ~]# ps -ef|grep 16074
root     12630 11879  0 09:50 pts/1    00:00:00 grep --color=auto 16074
root     16074     1  0 Apr26 ?        00:04:31 java -Xms2g -Xmx4g -Djava.awt.headless=true -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m -server -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=85 -Xnoclassgc -Xverify:none -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled -jar /www/service/car-pub-server-provider/bin/../car-pub-server-provider.jar
[root@chuxing-service ~]# ps -ef|grep 15588
root     12666 11879  0 09:50 pts/1    00:00:00 grep --color=auto 15588
root     15588     1  0 Apr26 ?        00:03:44 java -Xms2g -Xmx4g -Djava.awt.headless=true -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m -server -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=85 -Xnoclassgc -Xverify:none -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled -jar /www/service/bosskg-server-provider/bin/../bosskg-server-provider.jar

netstat -apn/netstat -n

[root@chuxing-service ~]# netstat -apn |grep 20880
tcp6       0      0 :::20880                :::*                    LISTEN      16074/java          
tcp6       0      0 192.168.40.84:50120     192.168.40.84:20880     ESTABLISHED 10974/java          
tcp6       0      0 192.168.40.84:20880     192.168.40.84:36100     ESTABLISHED 16074/java          
tcp6       0      0 192.168.40.84:36104     192.168.40.84:20880     ESTABLISHED 6983/java           
tcp6       0      0 192.168.40.84:20880     192.168.40.84:50120     ESTABLISHED 16074/java          
tcp6       0      0 192.168.40.84:36100     192.168.40.84:20880     ESTABLISHED 7726/java           
tcp6       0      0 192.168.40.84:20880     192.168.40.84:36104     ESTABLISHED 16074/java          
[root@chuxing-service ~]# netstat -n |grep 20880
tcp6       0      0 192.168.40.84:50120     192.168.40.84:20880     ESTABLISHED
tcp6       0      0 192.168.40.84:20880     192.168.40.84:36100     ESTABLISHED
tcp6       0      0 192.168.40.84:36104     192.168.40.84:20880     ESTABLISHED
tcp6       0      0 192.168.40.84:20880     192.168.40.84:50120     ESTABLISHED
tcp6       0      0 192.168.40.84:36100     192.168.40.84:20880     ESTABLISHED
tcp6       0      0 192.168.40.84:20880     192.168.40.84:36104     ESTABLISHED

注意:因為埠不能重複,所以,當一臺伺服器上同時存在多個應用要暴露dubbo服務時,需要指定不同的協議埠。否則的話,程式起不來。但程序能起來,這次記錄這邊日誌的原因就是雖然端口占用了,但是dubbo程式程序還能起來。

如果啟動日誌量大的時候可能沒觀察到對應的報錯,此時一定要注意看下對應的java程序是否有相同的服務名,如果有kill掉在重新發布自己的程式即可

我們可以這樣模擬:一個使用了dubbo提供服務的應用程式,本地將其啟動。此時,指定的埠將被佔用。如果我們再執行一個testcase方法時,就會發現啟動失敗,提示指定的dubbo埠已經被佔用。異常資訊:

2020-04-24 16:26:33.231 [main] ERROR org.springframework.boot.SpringApplication:858 - Application run failed
org.apache.dubbo.rpc.RpcException: Fail to start server(url: dubbo://10.8.0.58:20888/com.emax.omsbase.rpcapi.modules.enterprise.service.EnterpriseService?anyhost=true&application=omsbase-provider&bean.name=ServiceBean:com.emax.omsbase.rpcapi.modules.enterprise.service.EnterpriseService&bind.ip=10.8.0.58&bind.port=20888&channel.readonly.sent=true&codec=dubbo&deprecated=false&dubbo=2.0.2&dynamic=true&generic=false&heartbeat=60000&interface=com.emax.omsbase.rpcapi.modules.enterprise.service.EnterpriseService&methods=checkEnterprise,saveEnterprise,saveEnterpriseProductConfig,queryIndustryType1,getPage,selectLoginAcc,queryIndustryType2,updateEnterpriseById,updateEntStatusByEntId,resetEntAccountPasswordByEntId,openEnterpriseByEntId,updateEnterpriseProductConfigById,updateEnterpriseBillConfigById&pid=21060&qos.enable=false&register=true&release=2.7.3&side=provider&timeout=15000&timestamp=1587716790773) Failed to bind NettyServer on /10.8.0.58:20888, cause: Address already in use: bind
...
Caused by: org.apache.dubbo.remoting.RemotingException: Failed to bind NettyServer on /10.8.0.58:20888, cause: Address already in use: bind
...
Caused by: java.net.BindException: Address already in use: bind