개인 자료란 (JE)

  서버 커뮤니티

Profile ed3v8vl01025 대표칭호 없음
Profile

커뮤니티 소통 개발하기 API

RabbitMQ를 이용한 서버간 Message 전송

2021.07.23 조회 수 2386 추천 수 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/761/908/003/262x150.crop.jpg?20241025153749

건축

서울 숭례문(崇禮門) 4

KHC

2024-10-25

2

/files/thumbnails/578/899/003/262x150.crop.jpg?20241010142350

건축

경주 월정교 1

KHC

2024-10-10

2

/files/thumbnails/219/899/003/262x150.crop.jpg?20241009200950

건축

송전탑+도시 2

dbasd12

2024-10-09

2

/files/thumbnails/246/898/003/262x150.crop.jpg?20241008102328

레드스톤

단다단 - 오토노케(オトノケ) | 마인크래프트 노트블럭 커버

노트블럭전문가

2024-10-08

1

/files/thumbnails/348/896/003/262x150.crop.jpg?20241006103035

디도스/봇테러등등을 낚는 방법 4

물귀신

2024-10-06

3