반응형
Jedis subscribe 구현 시 다음 로직 실행 안되는 문제
단일로 subscribe 할 경우에는 아무 문제 없이 잘 수행됩니다.
하지만, 2개 이상의 subscribe를 하거나 별도의 로직을 subscribe 다음에 구현 할 때는 문제가 발생합니다.
아래서 예시로 들 내용 이전에 아래의 Link를 참고하세요.
Link : SpringBoot Redis(Jedis) 활용 Publish/Subscribe pub/sub 구현 방법
[@SpringBootApplication 중간 로직]
try{
SubServer server1 = ctx.getBean(SubServer.class);
server1.start();
System.out.println("첫번째 서버 실행");
}catch(Exception e) {
LOGGER.error("SIP Server Starting Error", e);
}
try{
SubServer server2 = ctx.getBean(SubServer.class);
server2.start();
System.out.println("두번째 서버 실행");
}catch(Exception e) {
LOGGER.error("CoAP Server Starting Error", e);
}
위와 같은 코드가 있다고 합시다.
2개의 class에 start 메소드는 같은 형태 입니다.
[start method]
public void start(){
try {
CommonGlobalVariable.jedis.getResource().subscribe(new JedisPubSub() {
@Override
public void onMessage(String channel, String message) {
System.out.println(channel);
System.out.println(message);
}
}, 체널명);
} catch (Exception e) {
LOGGER.error("Redis subscribe Error!!!", e);
}
}
위의 어플리케이션을 실행하면, 첫 번째 서버만 실행이 되고,
두번째 서버는 동작하지 않습니다.
멀티 로직을 수행하기 위해서는 start 메소드를 Thread로 처리해 주어야 합니다.
[예시 첫번째]
public void start(){
JedisPubSub sub = new JedisPubSub() {
@Override
public void onMessage(String channel, String message) {
System.out.println(channel);
System.out.println(message);
}
};
new Thread(new Runnable() {
@Override
public void run() {
Jedis jedis = CommonVariable.jedis.getResource();
try {
jedis.subscribe(sub, 체널명);
} catch (Exception e) {
LOGGER.error("Jedis Subscribe Error", e);
}finally {
if(jedis!=null) jedis.close();
}
}
}).start();
}
[예시 두번째]
public void start(){
new Thread(new Runnable() {
@Override
public void run() {
CommonVariable.jedis.getResource().subscribe(new JedisPubSub() {
@Override
public void onMessage(String channel, String message) {
try {
System.out.println(channel);
System.out.println(message);
} catch (Exception e) {
LOGGER.error("Jedis Subscribe Error", e);
}
}
}, 체널명);
}
}).start();
}
반응형
'Programing > JAVA' 카테고리의 다른 글
Java 로컬과 tomcat 배포 시 한글 인코딩 문제 해결 (0) | 2020.01.14 |
---|---|
Java 진짜 모든 공백 제거 정규식 Remove All Whitespace in Java regular expression (0) | 2019.11.26 |
SceneBuilder JavaFX 연동하기. 보다 편한 GUI 생성 (0) | 2019.10.22 |
Java Thread 사용방법, Thread에 대해 알아보자 자바 스레드 (0) | 2019.10.21 |
SuppressWarnings 어노테이션에 대해 알아보자 (0) | 2019.10.18 |
댓글