SpringCloud 는 어떻게 Eureka 를 사용 하여 서비스 간 의 전달 데 이 터 를 실현 합 니까?
8163 단어 SpringCloudEureka전달 하 다.데이터
Ok,오늘 은 세 가지 마이크로 서비스 간 에 데 이 터 를 전송 하 는 방식 을 알려 드 리 겠 습 니 다.각각:
1.가장 기본 적 인 Ip 포트 를 이용 하여 인터페이스 에 접근 하여 데이터 전송 을 요청 합 니 다.
2.Ip(하 드 인 코딩)대신 Eureka 를 사용 하여 데이터 전송 실현
3.Feign 이 더욱 빠 르 고'서비스 나 누 기'방식 으로 마이크로 서비스 간 의 데이터 전송 을 실현 합 니 다.
전제:Eureka 등록 센터 를 구축 하고 현재 주문 마이크로 서비스(서비스 소비자),한 사용자 마이크로 서비스(서비스 제공 자)가 있다 고 가정 한 다음 에 주문 마이크로 서비스 가 사용자 마이크로 서 비 스 를 호출 하여 사용자 의 정 보 를 얻 고 두 서비스 가 정상적으로 작 동 할 수 있다 고 가정 합 니 다.여기 서 SpringJpa 방식 으로 데 이 터 를 얻 을 수 있 도록 합 니 다.
1.RestTemplate+Ip 방식 사용:
1.데 이 터 를 전달 하 는 것 은 대부분이 집합 과 대상 의 형식 으로 전달 되 기 때문에 여기 서 집합 과 대상 의 방식 으로 예 를 들 면
사용자 마이크로 서비스(서비스 제공 자)에 호출 된 조회 방법 을 작성 하 십시오.
@RestController
@RequestMapping("/user")
public class UserController {
@Resource
private UserRepository userRepository;
@GetMapping("/getallUser")
public List<User> getUserPage(){
return userRepository.findAll();
}
@GetMapping("/getUser")
public User getUser(Long userId){
return userRepository.getOne(userId);
}
}
@Repository
public interface UserRepository extends JpaRepository<User,Long> {
}
@Entity
@Table(name="TM_USER")
@JsonIgnoreProperties(value={"hibernateLazyInitializer","handler","fieldHandler"})
public class User implements Serializable, Cloneable {
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
private Long userId;
/**
*
*/
@Column(name = "USER_NAME")
private String userName;
/**
*
*/
@Column
private String name;
/**
*
*/
@Column
private BigDecimal balance;
/**
* get set
*/
@Column
private int age;}
Ok,서비스 제공 자가 작성 되 었 습 니 다.다음은 서비스 소비 자 를 작성 하 겠 습 니 다.2.주문 마이크로 서비스(서비스 소비자)의 시작 클래스 에 RestTemplate 를 생 성 하 는 Bean 을 추가 합 니 다.
@SpringBootApplication
@EnableEurekaClient // eureka
public class MicroserviceSimplecConsumerOrderServerApplication {
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(MicroserviceSimplecConsumerOrderServerApplication.class, args);
}
}
주문 마이크로 서비스(서비스 소비자)프로필 yml 에 추 가 됩 니 다.그 중에서 localhost:9021 은 사용자 마이크로 서비스(서비스 제공 자의 Ip 와 포트)로 바 뀌 었 습 니 다.
user:
urlPath: http://localhost:9021
주문 서비스 제어 층 을 작성 합 니 다.이 곳 의 User 는 사용자 에 게 마이크로 서 비 스 를 복사 한 다음@Column,@Table 등 설명 을 삭제 합 니 다.임시 저장 대상 일 뿐 데이터베이스 와 아무런 관련 이 없습니다.
@RestController
@RequestMapping("/order")
public class OrderServerController {
@Autowired
private RestTemplate restTemplate;
@Value("${user.urlPath}")
private String urlPath;
//
@GetMapping("/allUser")
private List<User> getAllUser(){
ResponseEntity<List<User>> responseEntity = restTemplate.exchange("urlPath"+/user/getallUser?",
HttpMethod.GET, null, new ParameterizedTypeReference<List<User>>() {});
return responseEntity.getBody();
}
//
@GetMapping("/getUser")
private User getUser(Long userId){
User user = restTemplate.getForObject("urlPath"+/user/getUser?userId="+userId,User.class);
return user;
}
}
2.유레카 의 방식 으로 획득간단 하 다.사용자 마이크로 서비스의 서비스 이름 을 가정 합 니 다:microservice-privider-user
spring:
application:
name: microservice-privider-user
그리고 바로 교체 처 리 를 할 수 있 습 니 다.즉,:
@GetMapping("/allUser") //
private List<User> getAllUser(){
ResponseEntity<List<User>> responseEntity = restTemplate.exchange("microservice-privider-user"+"/user/getallUser", HttpMethod.GET, null, new ParameterizedTypeReference<List<User>>() {});
return responseEntity.getBody();
}
//
@GetMapping("/getUser")
private User getUser(Long userId){
User user = restTemplate.getForObject("microservice-privider-user"+/user/getUser?userId="+userId,User.class);
return user;
}
Ok,두 번 째 방식 으로 작 성 했 습 니 다.서비스 이름 으로 고정된 IP 를 교체 하여 Ip 하 드 인 코딩 이 유지 하기 어 려 운 문 제 를 해결 하 였 습 니 다.
세 번 째 Feign 방식 은 나중에"Feign:성명 성 Rest 클 라 이언 트"를 설명 할 때 자세히 설명 합 니 다.
gitHub 주소:https://github.com/mackjie/microservice-spring-cloudRabbitMQ 가 설정 되 어 있 기 때문에 ReadMe 를 읽 고 시작 항목 을 진행 하 십시오.그렇지 않 으 면 시작 오류 가 발생 합 니 다.
springcloud 학습 의 Eureka Client 구축 과 서비스 간 호출
Eureka 클 라 이언 트 구축:
pom 의존 도입
<!-- Eureka Client -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2.시작 클래스 추천 추가@EnableEurekaClient 설명바로 선택 한 등록 센터 가 eureka 라면@EnableEureka Client 를 추천 합 니 다.
다른 등록 센터(zookeeper,consul 등)라면@EnableDiscovery Client 를 추천 합 니 다.
3.프로필 추가:
#eureka
spring.application.name=producer
#
eureka.client.service-url.defaultZone=http://localhost:8761/eureka
#
eureka.client.register-with-eureka=true
#
eureka.client.fetch-registry=true
# ip
eureka.instance.prefer-ip-address=true
#
eureka.instance.instance-id=${spring.cloud.client.ip-address}:${server.port}
서비스 호출:두 가지 방법 이 있 습 니 다.
1.ribbon(부하 균형)+restTemplate
시작 클래스 추가:
@Bean
@LoadBalanced//
public RestTemplate initRestTemplate() {
return new RestTemplate();//
}
@Bean// , : , ,
public IRule initIRule() {
return new RandomRule();
}
RandomRule 은 무 작위 정책 을 표시 합 니 다.RoundRobinRule 은 폴 링 정책 을 표시 합 니 다(기본 값)
Weighted ResponseTimeRule 는 가중 정책 을 표시 합 니 다.
BestAvailableRule 은 요청 수 최소 정책 을 표시 합 니 다.
그리고 controller 에 RestTemplate 를 자동 으로 설치 한 후 restTemplate.getForObject()호출 을 사용 합 니 다.
2.feign(추천)
1.pom 의존 도입
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.1.1.RELEASE</version>
</dependency>
2.시작 클래스 에@EnableFeignClient 설명 추가3.인 터 페 이 스 를 만 들 고,
package com.sumengnan.test.web;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
@FeignClient(name = "eureka",fallback = HtystrixEurekaFallback.class)//
public interface EurekaServiceApi {
@GetMapping("test")
String test();
}
스크롤 백 방법:
package com.sumengnan.test.web;
/**
* eureka
*/
public class HtystrixEurekaFallback implements EurekaServiceApi {
@Override
public String test() {
return " , !";
}
}
4.그리고 controller 에 Eureka ServiceApi 를 자동 으로 설치 한 후 eureka ServiceApi.test()를 사용 하여 호출 합 니 다.이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
SpringCloud OAuth2 + JWT 인증 인증(一) 인증 서버Spring Cloud oAuth2(1) 라이센스 서버 구축 및 액세스 Spring Cloud oAuth2(2) 리소스 서버 구축 및 테스트 SpringCloud OAuth2 + JWT 인증 인증(一) 인증 서버 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.