Dubbo+Nacos實現服務註冊和發現

KeepSayingNo發表於2020-08-14

很多公司都用Dubbo作為自己的RPC遠端服務呼叫框架,其優異的效能也是得到了大家的認可。目前的標配是用ZooKeeper進行服務註冊,用Dubbo自帶的Dubbo Admin進行服務管理,基本來說是夠用的。

在講今天的內容之前,還是看看Dubbo+ZooKeeper是怎麼玩的。

Dubbo+ZooKeeper配置流程

1.POM依賴

<dependency>
   <groupId>com.alibaba.spring.boot</groupId>
   <artifactId>dubbo-spring-boot-starter</artifactId>
   <version>2.0.0</version>
</dependency>
<dependency>
	<groupId>com.101tec</groupId>
	<artifactId>zkclient</artifactId>
	<version>0.10</version>
</dependency>

2.暴露服務介面

    介面:

public interface StuRpcService {
    int add(int a, int b);
}

   實現類:(這裡的@service註解是dubbo的,不要用spring的)

@Service
@Component
public class StuRpcServiceImpl implements StuRpcService {
    private final static Logger logger = LoggerFactory.getLogger(StuRpcServiceImpl.class);

    @Override
    public int add(int a, int b) {
        logger.info("StuRpcServiceImpl#add》》》》》》》");
        System.out.println("StuRpcServiceImpl#add》》》》》》》");
        return a+b;
    }
}

3. 消費服務

@RequestMapping("rpc")
@RestController
public class RpcConsumerController {
    @Reference
    private StuRpcService stuRpcService;

    @RequestMapping("invoke")
    public String invokeRpcService(){
        return String.valueOf(stuRpcService.add(1, 2));
    }
}

4. dubbo註冊配置

dubbo.application.name=microservice
dubbo.registry.protocol=zookeeper
dubbo.registry.address=127.0.0.1:2181

5. 起zookeeper,起自己的應用,就可以玩起來了。

上面講解了一遍原有的zookeeper是怎麼玩的,現在如果要用nacos來做服務註冊和發現,改動大嗎?答案是,改動很小,只需要改application.properties和pom依賴即可。

Dubbo+Nacos配置流程要做的改動

1. pom依賴

<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>dubbo-registry-nacos</artifactId>
	<version>0.0.2</version>
</dependency>
<dependency>
	<groupId>com.alibaba.nacos</groupId>
	<artifactId>nacos-client</artifactId>
	<version>0.6.1</version>
</dependency>

2. application.properties

nacos.discovery.server-addr=127.0.0.1:8848
nacos.config.server-addr=127.0.0.1:8848
dubbo.registry.address = nacos://127.0.0.1:8848
dubbo.protocol.name=dubbo
dubbo.protocol.port=-1

3. 啟動nacos,看看服務提供者和消費者是不是都註冊上來了

4. 呼叫一把服務

我是用idea通過8090埠起的服務,這裡把服務提供的@Service給註釋掉了,然後用dos命令視窗通過8091埠起了一遍應用,這裡是沒有註釋掉@Service的包。造成的結果是:8090埠的應用沒有提供服務,8091埠的應用提供了add服務。

http://localhost:8090/rpc/invoke

呼叫後的結果:

網頁上顯示3,idea控制檯沒有列印任何日誌,dos命令視窗列印了日誌

總結

使用Nacos替換掉Zookeeper,對整個專案的改動並不大。至於為什麼用Nacos,不用Zookeeper,有下面的原因

1)分散式系統有CAP理論,Nacos實現了AP,Zookeeper實現了CP,為了系統的HA,寧願選用AP

2)Zookeeper僅僅是一個簡單的服務註冊工具,Nacos不僅僅支援服務註冊發現,而且實現了配置中心

3)Nacos作為SpringCloud全家桶一員,未來的發展肯定是和微服務路線圖發展一致

相關文章