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()を追加できます
上級者向け:このブログ