spring boot openfeign 은 이로부터 http Client 와 안녕 히 계 세 요.

머리말
마이크로 서비스 디자인 에서 서비스 간 의 호출 은 매우 정상 적 인 것 입 니 다.보통 저 희 는 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 이 있 으 면 나중에 개발 서비스 가 서비스 호출 에 대한 결합 을 풀 수 있 습 니 다!
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기