개인 자료란 (JE)

  서버 커뮤니티

Profile ed3v8vl01025 대표칭호 없음
Profile

커뮤니티 소통 개발하기 API

RabbitMQ를 이용한 서버간 Message 전송

2021.07.23 조회 수 2368 추천 수 2

BungeeCord Plugin Messaging Channel의 경우 번지코드를 사용한다는 전제하에  서버 안에 최소 1명의 플레이어가 온라인이어야 한다는 제약이 있었습니다.

하지만, MessageLibrary를 이용하면 RabbitMQ를 통해 제약 없이 Bukkit 서버 간 메시지를 주고받을 수 있습니다.


MessageLibrary는 타입별 MessageHandler를 등록해 해당 타입의 Message가 들어오면 해당 MessageHandler를 처리하게 설계되어 있습니다. 또한 데이터는 Gson을 통해 직렬화 과정을 거쳐 실제 전송 과정에서는JSON으로 전송하게 됩니다.


다음과 같은 테스트 코드를 통해 'Test{message='Send Message', serialized='null'}' 메세지가 출력됨을 확인할 수 있습니다.

Github, RabbitMQ Install


Test.java

package Message;

public class Test {
    private String message;
    private transient String serialized;

    public Test() {}

    public Test(String message) {
        this.message = message;
        this.serialized = "Not Serialized";
    }
    @Override
    public String toString() {
        return "Test{" +
                "message='" + this.message + '\'' +
                ", serialized='" + this.serialized + '\'' +
                '}';
    }
}

Send.java

public class Send extends JavaPlugin {
    private RabbitManager rabbitManager;
    private ConnectionHandle connectionHandle;
    private ChannelHandler channelHandler;

    @Override
    public void onEnable() {
        this.rabbitManager = ((MessageLibrary) Bukkit.getPluginManager().getPlugin("MessageLibrary")).getRabbitManager();
        this.connectionHandle = this.rabbitManager.getConnection(this);
        this.channelHandler = this.connectionHandle.registerChannel("Test");
        this.channelHandler.sendMessage(new Test("Send Message"));
    }

Recv.java

public class Recv extends JavaPlugin {
    private RabbitManager rabbitManager;
    private ConnectionHandle connectionHandle;
    private ChannelHandler channelHandler;

    @Override
    public void onEnable() {
        this.rabbitManager = ((MessageLibrary) Bukkit.getPluginManager().getPlugin("MessageLibrary")).getRabbitManager();
        this.connectionHandle = this.rabbitManager.getConnection(this);
        this.channelHandler = this.connectionHandle.registerChannel("Test");
        this.channelHandler.registerType(Test.class, System.out::println);
    }

2개의 댓글

명이
2021.07.24

오 Plugin Message 때문에 골치아팠던적이 있는데, 이런 좋은게 있었네요!

lhh2020
2021.07.25

이걸 좀 일찍 알았어야 했는데..

뉴스 및 창작물
/files/thumbnails/762/770/003/262x150.crop.jpg?20240418073724

레드스톤

T.B.H (고민중독) | 노트블럭 버전 | NoteBlock Cover [한국어 영어 중국어 가사 추가]

노트블럭전문가

2024-04-18

0

/files/thumbnails/218/767/003/262x150.crop.jpg?20240412130213

레드스톤

우리의 꿈 - 원피스 오프닝

노트블럭전문가

2024-04-12

0

/files/thumbnails/505/766/003/262x150.crop.jpg?20240411122306

레드스톤

기동전사 건담 수성의 마녀 | 노트블럭 커버 1

노트블럭전문가

2024-04-11

1

/files/thumbnails/932/765/003/262x150.crop.jpg?20240410124459

레드스톤

마인크래프트 노트블록으로 만든 『 밤양갱 (Bam Yang Gang) 』

노트블럭전문가

2024-04-10

0

/files/thumbnails/403/765/003/262x150.crop.jpg?20240409190538

레드스톤

마인크래프트 노트블록으로 만든 『 밤양갱 (Bam Yang Gang) 』

Sonttukk

2024-04-09

4