개인 자료란 (JE)

  서버 커뮤니티

Profile ed3v8vl01025 대표칭호 없음
Profile

커뮤니티 소통 개발하기 API

RabbitMQ를 이용한 서버간 Message 전송

2021.07.23 조회 수 2370 추천 수 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/487/784/003/262x150.crop.jpg?20240508233607

모드

Windows Borderless 모드에서 악성코드 발견

학교가기싫다

2024-05-08

1

/files/thumbnails/384/778/003/262x150.crop.jpg?20240512002324

업데이트

마인크래프트 자바 에디션 스냅샷 24w18a

학교가기싫다

2024-05-06

0

/files/thumbnails/855/781/003/262x150.crop.jpg?20240505141129

레드스톤

레이저 클리너

GlassesFilm

2024-05-05

1

/files/thumbnails/576/775/003/262x150.crop.jpg?20240426232553

아티클

이달의 블록: 단단한 진흙

학교가기싫다

2024-04-26

0

/files/thumbnails/115/774/003/262x150.crop.jpg?20240428135129

업데이트

마인크래프트 1.20.5 정식 업데이트

학교가기싫다

2024-04-24

0