springboot 2.0+elasticsearch 5.5+rabbitmq 검색 서비스의 구덩이 구축
4945 단어 springbootelasticsearchrabbitmq
이 편 은 간단 한 검색 서 비 스 를 만 드 는 방법 에 대해 서 는 언급 하지 않 고 약 일주일 동안 근무 시간 에 만난 몇 개의 구 덩이 를 기록 합 니 다.
왜 elasticsearch 5.x 를 선 택 했 습 니까?
새로운 서 비 스 는 역사적 인 부담 이 없 기 때문에 이론 적 으로 최신 6.x 를 사용 해 야 한다.그러나 spring-data-elasticsearch 는 5.x 만 지원 하고 시간 이 촉박 해서 api 를 직접 포장 할 수 없 는 것 도 ELK 의 이전 버 전이 혼 란 스 러 웠 기 때문에 어 쩔 수 없 이 es 는 2.x 에서 5.x 로 직접 도착 했다.5.x 와 2.x 의 차 이 를 조회 해 보 세 요.쉽게 말 하면 디스크 공간-50%,색인 시간-50%,조회 성능+25%입 니 다.
spring-data-elasticsearch 는 3.0.7 로 업그레이드 해 야 하기 때문에 spring 은 2.x 로 업그레이드 해 야 하고 뒤에서 밟 은 구 덩이 를 직접 초래 합 니 다.
docker 설치 es 는 기본적으로 x-path plugin 을 설치 합 니 다.
spring-data 는 es5.x 를 지원 하지만 기능 이 완선 되 지 않 습 니 다.따라서 x-path 플러그 인 이 설치 되 어 있 으 면 org.elasticsearch.client:x-pack-transport:5.5.0 을 도입 해 야 합 니 다.버 전 은 es 버 전과 일치 하고 스스로 TransportClient 를 실현 해 야 합 니 다.다음 과 같 습 니 다.
@Component
public class ESconfig {
@Bean
public TransportClient transportClient() throws UnknownHostException {
TransportClient client = new PreBuiltXPackTransportClient(Settings.builder()
.put("cluster.name", "docker-cluster")
.put("xpack.security.user", "elastic:changeme")
.build())
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("0.0.0.0"), 9300));
return client;
}
}
이것 도 docker 에서 x-path 라 는 플러그 인 을 처리 하고 싶 지 않 기 때문에 비교적 빠 른 해결 방안 을 선택 한 것 입 니 다.필요 없 는 상황 에서 당분간 es 자체 의 일부 물건 을 접 하지 않 아 도 됩 니 다.mq 는 message 의 class 정 보 를 저장 하여 deserialized 에 실 패 했 습 니 다.
제목 에 있 는 rabbitmq 는 언급 되 지 않 았 습 니 다.단순히 메시지 큐 로 사용 하기 때문에 데이터 가 변 할 때 메시지 id 를 mq 에 버 리 고 search 서비스 쪽 consumer 에서 소비 합 니 다.
문 제 는 메시지 가 mq 에 버 려 졌 을 때 자신의 Object 로 봉 하여 rabbitTemplate.receive AndConvert 를 사용 하 는 데 실 패 했 습 니 다.message 는 Object 의 package 정 보 를 가지 고 있 기 때 문 입 니 다.어 쩔 수 없 이 consumer 는 quue 의 message bytes 를 직접 가 져 올 수 밖 에 없 었 고 Object Mapper.readValue 의 방법 으로 json 형식 을 Object 로 바 꿀 수 밖 에 없 었 다.
gradle 설정 은-Dloader.main 에서 시작 함 수 를 지정 할 수 있 습 니 다.
mq 가 도입 되 었 기 때문에 search 서 비 스 는 consumer 를 시작 해 야 합 니 다.웹 서 비 스 를 시작 하지 않 는 애플 리 케 이 션 을 따로 실현 하고 Simple Message Listener Container 와 Message Listener Adapter 를 설정 하 는 방법 은 다음 과 같 습 니 다.
@Bean
SimpleMessageListenerContainer container(ConnectionFactory connectionFactory,
MessageListenerAdapter listenerAdapter,
MQconfig properties) {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
container.setQueueNames(properties.getQueueName());
container.setMessageListener(listenerAdapter);
return container;
}
@Bean
MessageListenerAdapter listenerAdapter() {
MessageListenerAdapter listenerAdapter = new MessageListenerAdapter(itemConsumer,
"consume");
return listenerAdapter;
}
문 제 는 gradle 설정 을 할 때 build 에서 나 온 jar 패 키 지 를 어떻게 지정 할 수 있 는 지 오래 찾 았 습 니 다.-dloader.main 에서 시작 애플 리 케 이 션 을 지정 할 수 있 습 니 다.해결 방법 은 다음 과 같 습 니 다.xxx.gradle 파일 에 추가
bootJar {
manifest {
attributes 'Main-Class': 'org.springframework.boot.loader.PropertiesLauncher'
}
}
springboot 1.5.9 프로젝트 에서 시작 애플 리 케 이 션 을 지정 해 야 합 니 다.추가 해 야 합 니 다.
springBoot{
layout = "ZIP"
}
유효 여 부 를 확인 하 는 방법 은 build 이후 jar 가방 을 직접 풀 고 xxx(프로젝트 이름)/META-INFO/MANIFEST.MF 에서 확인 하 는 것 입 니 다.만약 에...Main-Class: org.springframework.boot.loader.PropertiesLauncher
하면,만약,만약...
Main-Class: org.springframework.boot.loader.JarLauncher
파일 에 있 는 Start-Class 를 시작 합 니 다.
es 인덱스 의 mapping 을 수정 할 수 없습니다.
단순히 es 의 텍스트 검색 기능 만 사 용 했 기 때문에 실제 응용 할 때 검색 결과 가 만 족 스 럽 지 못 한 부분 이 많다.예 를 들 어'책상'을 검색 하고'컴퓨터 책상/책상'등 xx 책상 내용 을 검색 하지 못 하 는 경우 도 많다.따라서 synonym dictionary 를 추가 하여 단어 가 필요 한 필드 에 자신의 ik 를 사용 하지 않 습 니 다.smart 단어 기,이러한 필드 의 mapping 을 변경 해 야 합 니 다.
// analyzer
@Field(type = FieldType.Text, index = true, analyzer = "synonym")
private String description;
es 의 mapping 을 수정 할 수 없 기 때문에 수 동 으로 새로운 mapping 을 만 들 고 reIndex 방법 으로 backfill 데이터(es5.x 는 reIndex api 를 가 져 왔 습 니 다).인터넷 에는 alias 를 통 해 일부 수정 장면 에서 애플 리 케 이 션 을 다시 시작 하거나 배치 하지 않 아 도 매 핑 을 부 드 럽 게 수정 할 수 있 습 니 다.구체 적 으로 조회 할 수 있 습 니 다.이상 의 차 이 는 검색 서비스 가 밟 은 구 덩이 를 많이 만 들 지 않 았 고 몇 개 는 많은 시간 과 정력 을 들 여 해결 했다.여기 서 참고 가치 가 있 기 를 바란다.이후 검색 서 비 스 는 최 적 화 된 부분 이 있 고 천천히 업 데 이 트 될 것 이 며 많은 응원 부 탁 드 리 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.