개인 자료란 (JE)

  서버 커뮤니티

한국 마인크래프트 포럼

마인크래프트 자료 및 커뮤니티 플랫폼

전체 회원수 122,091명 ( +6명 )

※ 장기간 미활동 회원 제외

Profile ed3v8vl01025 대표칭호 없음
Profile

커뮤니티new 개발자란new 개발자 자료 API or 라이브러리

RabbitMQ를 이용한 서버간 Message 전송

2021.07.23 조회 수 83 추천 수 2
창작여부 창작자료 
마인크래프트 버전 모두 
API 종속성 Bukkit 

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개의 댓글

lhh2020
2021.07.25

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

명이
2021.07.24

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

컨텐츠
https://www.koreaminecraft.net/files/thumbnails/850/878/002/262x150.crop.jpg?20211018191640
(포션 시리즈) 3편 - 비 2

GlassesFilm

2021-10-18

3

https://www.koreaminecraft.net/files/thumbnails/337/871/002/262x150.crop.jpg?20211014221722

플러그인

달고나 뽑기 in Minecraft 8

BlueRing1017

2021-10-14

6

https://www.koreaminecraft.net/files/thumbnails/848/870/002/262x150.crop.jpg?20211014131239

답안지

한마탐 4주차 / 정오표 + 해설 1

베개냥이

2021-10-14

1