Dubbo 性能測試
通過測試我們初步可以判斷 dubbo 的接口性能在 9k -1w 左右
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICN4ETMfdHLkVGepZ2XtxSZ6l2clJ3LcBnYldHL0FWby9mZvwVPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsAjMfd3bkFGazxCMx8VesATMfhHLlN3XnxCMz8FdsYkRGZkRG9lcvx2bjxSa2EWNhJTW1AlUxEFeVRUUfRHelRHL2EzXlpXazxyayFWbyVGdhd3LcV2Zh1Wa9M3clN2byBXLzN3btg3PwJWZ35yN5ADM1IjZkBDM2QWZ0ADNzYzXwUzNwADM4AzLcBTMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.webp)
配置多個注冊中心 Zk
屬性檔案配置位址:
#Zookeeper 位址
#單注冊中心
#dubbo.registry.address=zookeeper://127.0.0.1:2181
#多注冊中心
dubbo.registries.orderZK.address=zookeeper://127.0.0.1:2181
dubbo.registries.userZK.address=zookeeper://127.0.0.1:2181
服務提供者:
@DubboService(registry = "orderZK")
服務消費者:
@DubboReference(check = false, registry = "orderZK")
private
啟動時檢查
在啟動時檢查依賴的服務是否可用
Dubbo 預設會在啟動時檢查依賴的服務是否可用,不可用時會抛出異常,阻止 Spring 初始化完成,以便上線時,能及早發現問題,預設 check="true"。
可以通過 check="false" 關閉檢查,比如,測試時,有些服務不關心,或者出現了循環依賴,必須有一方先啟動。
另外,如果你的 Spring 容器是懶加載的,或者通過 API 程式設計延遲引用服務,請關閉 check,否則服務臨時不可用時,會抛出異常,拿到 null 引用,如果 check="false",總是會傳回引用,當服務恢複時,能自動連上。
使用示例:
@DubboReference(check = false)
private
如果我們不加,并且服務沒有啟動的時候,就會導緻調用者服務啟動失敗。服務啟動失敗。如下:
參數驗證
參數驗證功能是基于 JSR303 實作的,使用者隻需辨別 JSR303 标準的驗證 annotation,并通過聲明 filter 來實作驗證。
首先我們添加依賴
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.0.0.GA</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.2.0.Final</version>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.el</artifactId>
<version>3.0.1-b11</version>
</dependency>
DTO 對象增加參數限制, 增加一個簡單的 userId 不能為空
@Data
public class QueryOrderDto implements Serializable {
@NotNull(message = "userId is not null")
private String userId;
private String shopId;
private String
接口位址:
public interface OrderService {
String createOrder(CreateOrderDto createOrderDto);
@interface QueryOrder{}
List<OrderDto> queryOrder(QueryOrderDto queryOrderDto);
}
javax.validation.ValidationException: Failed to validate service: com.ssm.rpc.service.OrderService, method: queryOrder, cause: [ConstraintViolationImpl{interpolatedMessage='userId is not null', propertyPath=userId, rootBeanClass=class com.ssm.rpc.dto.QueryOrderDto, messageTemplate='userId is not null'}]
at org.apache.dubbo.validation.filter.ValidationFilter.invoke(ValidationFilter.java:96)
at org.apache.dubbo.rpc.protocol.FilterNode.invoke(FilterNode.java:61)
at org.apache.dubbo.rpc.protocol.dubbo.filter.TraceFilter.invoke(TraceFilter.java:77)
at 省略更多。。。
參考文檔
- Dubbo 使用案例