spring boot openfeign 은 이로부터 http Client 와 안녕 히 계 세 요.
3990 단어 springbootopenfeignhttpclient
마이크로 서비스 디자인 에서 서비스 간 의 호출 은 매우 정상 적 인 것 입 니 다.보통 저 희 는 http Client 를 사용 하여 원 격 자원 에 대한 호출 을 실현 합 니 다.이런 방법 은 지식 서비스의 주소,업무 인터페이스 주소 등 이 필요 합 니 다.그리고 그 가 개발 한 후에 야 호출 할 수 있 습 니 다.이것 은 통합 개발 에 있어 좋 은 일이 아니 라 A 업무 와 B 업무 의 강 한 의존성 이 생 겼 습 니 다.그러면 우 리 는 어떻게 결합 을 풀 수 있 습 니까?답 은 openfeign 프레임 워 크 입 니 다.이것 은 springcloudy 의 일부분 입 니 다.
1 패키지 인용 추가
'org.springframework.cloud:spring-cloud-starter-openfeign',
주의:만약 당신 이 springcloudy 버 전 을 인용 하지 않 았 다 면,먼저 그것 을 성명 해 야 합 니 다.
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}
2 프로필 관련 설정 정의
//
sourceSets {
integTest {
java.srcDir file('src/test/java')
resources.srcDir file('src/test/resources')
}
}
task integTest(type: Test) {
testClassesDirs = sourceSets.test.output.classesDirs
classpath = sourceSets.test.runtimeClasspath
}
3 서비스 인 터 페 이 스 를 정의 하고 위조 방법 을 정의 하 는 것 이 바로 서비스 에서 의 방법 입 니 다.방법 파라미터 와 그 반환 값 을 알 고 싶 으 면 상관 하지 않 고 유닛 테스트 에서 MOCK 만 하면 됩 니 다.
package test.lind.javaLindDay.feignClientDemo;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.context.annotation.Profile;
import org.springframework.web.bind.annotation.GetMapping;
/**
* .
*/
@Profile("!integTest")
@FeignClient(name = "serviceName")
public interface MockClient {
@GetMapping(path = "/balanceSheet/{clientCode}")
String balanceSheet(String clientCode);
}
4 Profile 의 역할profile 은 환경 변수 입 니 다.클래스 에서 ActiveProfile 을 통 해 활성화 시 킵 니 다.이 를 사용 할 때 Profile 주석 이 있 으 면 위 코드 에서 MockClient 대상 은 integTest 환경 에서 사용 할 수 없습니다.
5 MOCK 를 추가 하여 자동 으로 주입 되 므 로@Bean 주 해 를 설명 합 니 다.
package test.lind.javaLindDay;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import test.lind.javaLindDay.feignClientDemo.MockClient;
@Configuration
@Profile("integTest")
public class MockClientTest {
@Bean
public MockClient mockClient() {
MockClient client = mock(MockClient.class);
when(client.balanceSheet(
anyString()))
.thenReturn("OK");
return client;
}
}
6.유닛 테스트 를 추가 합 니 다.유닛 테스트 에서 환경 변 수 를 지정 해 야 합 니 다.
package test.lind.javaLindDay;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.junit4.SpringRunner;
import test.lind.javaLindDay.feignClientDemo.MockClient;
@RunWith(SpringRunner.class)
@SpringBootTest
// profile
@ActiveProfiles("integTest")
public class JavaLindDayApplicationTests {
@Autowired
MockClient mockClient;
@Test
public void testMockClient() {
assertEquals(mockClient.balanceSheet("OK"), "OK");
}
}
테스트 를 실행 하면 MockClient 가 주 입 됩 니 다.Mock 구현 클래스 를 사용 합 니 다.Mock 구현 클래스 의 Profile 만 integtest 환경 을 가리 키 기 때 문 입 니 다.openfeign 이 있 으 면 나중에 개발 서비스 가 서비스 호출 에 대한 결합 을 풀 수 있 습 니 다!
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin Springboot -- 파트 14 사용 사례 REST로 전환하여 POST로 JSON으로 전환前回 前回 前回 記事 の は は で で で で で で を 使っ 使っ 使っ て て て て て リクエスト を を 受け取り 、 reqeustbody で 、 その リクエスト の ボディ ボディ を を 受け取り 、 関数 内部 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.