柚子快報激活碼778899分享:RPC:Dubbo
柚子快報激活碼778899分享:RPC:Dubbo
文章目錄
1. 添加依賴2. 創(chuàng)建服務接口3. 實現(xiàn) Dubbo 服務提供方4. 實現(xiàn) Dubbo 服務消費方5. 注意:啟動時會出現(xiàn)循環(huán)依賴報錯,報錯詳情如下:6. 單元測試:使用JUnit結合Mockito
RPC的高并發(fā)、低延遲可以為多個微服務提供相互間的通信
1. 添加依賴
2. 創(chuàng)建服務接口
public interface HelloService {
String sayHello(String name);
}
3. 實現(xiàn) Dubbo 服務提供方
bootstrap.yaml新增配置
dubbo:
scan:
base-packages: com.rainbowred.core.service
protocol:
name: dubbo
port: 20880
registry:
address: nacos://172.16.3.38:8848
實現(xiàn) HelloService 接口
@DubboService(version = "1.0.0")
public class DefaultHelloService implements HelloService {
@Override
public String sayHello(String name) {
return "Hello, " + name;
}
}
nacos顯示有dubbo服務
4. 實現(xiàn) Dubbo 服務消費方
bootstrap.yaml新增配置
dubbo:
registry:
address: nacos://172.16.3.38:8848
@RestController
@RequestMapping("/tc")
public class TestController {
@DubboReference(version = "1.0.0")
private HelloService helloService;
@RequestMapping("/testRpc")
public String testRpc(String data) {
return helloService.sayHello(data);
}
}
5. 注意:啟動時會出現(xiàn)循環(huán)依賴報錯,報錯詳情如下:
Description:
The dependencies of some of the beans in the application context form a cycle:
targeterBeanPostProcessor defined in class path resource [com/alibaba/cloud/dubbo/autoconfigure/DubboOpenFeignAutoConfiguration.class]
↓
com.alibaba.cloud.dubbo.metadata.repository.DubboServiceMetadataRepository (field private com.alibaba.cloud.dubbo.service.DubboMetadataServiceProxy com.alibaba.cloud.dubbo.metadata.repository.DubboServiceMetadataRepository.dubboMetadataConfigServiceProxy)
↓
com.alibaba.cloud.dubbo.service.DubboMetadataServiceProxy
┌─────┐
| com.alibaba.cloud.dubbo.autoconfigure.DubboMetadataAutoConfiguration (field private com.alibaba.cloud.dubbo.metadata.resolver.MetadataResolver com.alibaba.cloud.dubbo.autoconfigure.DubboMetadataAutoConfiguration.metadataResolver)
└─────┘
暫時解決辦法:yaml文件新增配置
spring:
main:
allow-circular-references: true
6. 單元測試:使用JUnit結合Mockito
測試Dubbo服務提供者
測試服務提供者,通常需要測試其業(yè)務邏輯而不是Dubbo框架本身??梢允褂脴藴蔎Unit測試來完成。
import com.rainbowred.commons.services.rpc.HelloService;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
/**
* @author wangyitao
* @date 2023/11/28.
*/
public class HelloServiceImplTest {
/**
* 測試Dubbo服務提供者
*/
@Test
public void testSayHello() {
HelloService service = new HelloServiceImpl();
String result = service.sayHello("World");
Assertions.assertEquals("Hello, World !", result);
}
}
測試結果:
測試Dubbo服務消費者
對于服務消費者,可以使用Mockito來模擬Dubbo服務的行為。
import com.rainbowred.commons.services.rpc.HelloService;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import static org.mockito.Mockito.*;
/**
* @author wangyitao
* @date 2023/11/28.
*/
public class HelloServiceConsumerTest {
/**
* 測試Dubbo服務消費者
*/
@Test
public void testSayHello() {
// 創(chuàng)建一個模擬的HelloService對象
HelloService mockService = mock(HelloService.class);
// 配置模擬對象的行為
when(mockService.sayHello("World")).thenReturn("Hello, World !");
// 使用模擬的服務
String response = mockService.sayHello("World");
// 驗證結果
Assertions.assertEquals("Hello, World", response);
// 驗證交互行為
verify(mockService).sayHello("World");
}
}
測試結果:
柚子快報激活碼778899分享:RPC:Dubbo
精彩內容
本文內容根據(jù)網(wǎng)絡資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉載請注明,如有侵權,聯(lián)系刪除。