Spring Cloud StreamのrabbitMQを使用してすばやく簡単に開始する

1.依存関係:

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
        </dependency>

インターフェイスを定義します。

package van.client.rabbit;

import org.springframework.cloud.stream.annotation.Input;
import org.springframework.cloud.stream.annotation.Output;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.SubscribableChannel;

/**
 * @author Van
 * @date 2020/4/11 - 11:53
 */
public interface RabbitClient {
    @Input("MyMessage")
    SubscribableChannel input();
    @Output("MyMessage")
    MessageChannel output();
}

3.受信者を定義します

package van.client.rabbit;

import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.cloud.stream.annotation.StreamListener;
import org.springframework.stereotype.Component;

/**
 * @author Van
 * @date 2020/4/11 - 11:55
 */
@Component
@EnableBinding(RabbitClient.class)
@Slf4j
public class StreamReceiver {
    @StreamListener("MyMessage")
    public void message(Object msg){
        log.info("receive message:{}",msg);
    }
}

4.インターフェイスを使用してメッセージを送信する

package van.client.controller;

import org.springframework.messaging.support.MessageBuilder;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import van.client.rabbit.RabbitClient;

import javax.annotation.Resource;

/**
 * @author Van
 * @date 2020/4/11 - 12:01
 */
@RestController
@RequestMapping("/rabbit")
public class RabbitController {
@Resource
    private RabbitClient rabbitClient;
@RequestMapping("/msg")
    public void msg(){
    String msg="rabbit message";
    rabbitClient.output().send(MessageBuilder.withPayload(msg).build());
}
}

プロジェクトを開始し、localhost:8080 / rabbit / msgにアクセスすると、
次のように表示されます。
ここに画像の説明を挿入

その他:

1 **。クラスター環境:**
複数のプロジェクトが開始されると、それに応じてMyMessageという名前の複数のキューが作成され、メッセージが送信されると、すべてのキューがメッセージを受信しますが、これはもちろん望ましい結果ではありません。メッセージを一度送信して、1つのアイテムのみを受信する方法は?

構成ファイルに参加します:spring.cloud.stream.bindings.MyMessage.group = client

これは、すべてのクラスターがグループ化され、クライアントという名前のキューを共有するのと同じです。
メッセージを送信すると、1つのアイテムのみが受信されます。
ここに画像の説明を挿入
2.送信されたメッセージがJavaオブジェクトであり、キューに蓄積されたメッセージを見たい場合。
何も処理しないと、キューに表示されるのはゴースト(base64で暗号化されたもの)がわからない文字列なので、シリアル化されたJavaオブジェクトを表示するにはどうすればよいですか?

構成ファイルに追加します:
spring.cloud.stream.bindings.MyMessage.content-type = application / json

MyMessageはここでカスタマイズされていることに注意してください。実際、何でも書くことができます。

受信者が別のメッセージを送信したい場合、それはメッセージが確認されたことを意味し、@ SentTo()を追加できます

上級者向け:このブログ

56件のオリジナル記事を公開 Like1 Visits1509

おすすめ

転載: blog.csdn.net/weixin_44841849/article/details/105450384