インターネット上のrabbitmqのインストール方法に関する多くのチュートリアルがあるので、ここでは繰り返しません。
RabbitMQを使用して、スプリングブートに文字列とオブジェクトを転送します。この記事に記載されている例は、2つの異なるプロジェクト間でオブジェクトと文字列を転送することです。
rabbitmq依存関係(両方のプロジェクトで同じ構成):
<Dependency> groupId> org.springframework.boot </groupid> <artifactid> spring-boot-starter-amqp </artifactid> </dependency>
POM構成ファイル(両方のプロジェクトで同じ構成):
spring.application.name:demo1 //プロジェクト名Spring.rabbitmq.host:192.168.1.111 //独自のipspring.rabbitmq.port:5672spring.username:guestspring.rabbitmq.password:guest.rabbitmq.virt-host: /spring.rabbitmq.publisher-confirms:truespring.rabbitmq.publisher-returns:truespring.rabbitmq.template.mandatory:true
キャラクター転送相互送信(この例で使用されるトピックタイプ)
1>。まず、キューキューが生成されるプロデューサー(プロジェクトA)に構成ファイルを書き込み、スイッチ交換とバインディングが実行されます
org.springframework.amqp.core.binding; Import org.springframework.amqp.core.bindingbuilder; Import org.springframework.amqp.core.queue; Import org.springframework.amqp.core.topicexchange; Import; org.springframework.beans.factory.annotation.qualifier; Import org.springframework.context.annotation.bean; import org.springframework.context.annotation.configuration; senderConfigration {/** *@説明:新しいキュートピックを作成します。messages *@data:16:14:14 2017/12/22 */@bean(name = "messages")public queue queemessages(){return new queue( "topic.messages"); }/***@説明:Switchを定義*@データ:16:15 2017/12/22*/@bean public topicexchange Exchange(){return new topicexchange( "Exchange"); }/** *@説明:スイッチはキューメッセージにバインドされ、スイッチをトピックにバインドします。 BindingBuilder.Bind(Queuemessages).to(Exchange).with( "topic.messages"); }}2>。 2番目のステップ(項目A)で、プロデューサーはメッセージをメッセージキューに送信します。
/** * @author:fdh * @description: * @date:14:15 2017/12/22 */ @controllpublic class rabbitcontroller {@autowired private amqptemplate amqptemplate; @RequestMapping( "/sendss")public void send1(){amqptemplate.convertandsend( "exchange"、 "topic.messages"、 "hello topic.messages rabbitmq"); }}3>。次に、消費者(プロジェクトB)側にリスナーを書きます。スイッチは、プロデューサーが生成したメッセージを、バインドされたルーティングキー(Topic.messages)に基づいて一致するメッセージキューに配置します。リスナーは、対応するメッセージキューを聞いて、メッセージキューにルーティングされたメッセージを取得します。
import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;import org.springframework.amqp.rabbit.annotation.RabbitListener;/** * @ Author:fdh * @ Description: Message queue listener* @ Date: Create in 14:19 2017/12/22 */ @componentPublic class Receiver {@rabbitlistener(queues = "topic.messages")public void process2(string str1)throws classNotFoundException {system.out.println( "messages:"+str1); system.out.println(thread.currentthread()。getname()+"topic.message queue:"+str1)からメッセージを受信しました。 }このようにして、単純な文字列伝送が書き込まれます。定義されているマッピングを開きましょう:192.168.1.111:8080/sendss
消費者側のコンソールウィンドウに印刷されたメッセージが表示されます
上記は、文字列を送信する簡単な例です。
2.以下は、消費者と生産者の間のオブジェクトの送信に焦点を当てています。
オブジェクトの送信は、プロデューサー(a)でシリアル化する必要があります。つまり、オブジェクトは送信用のバイト配列に変換され、消費者では、変換されたバイト配列がオブジェクトに偏ります。シリアル化と敏aserializationには多くの方法があります。ここでは、Javaのシリアル化可能なインターフェイスを使用しています
1>。生産者(プロジェクトA)と消費者(プロジェクトB)のプロジェクトでエンティティクラスを作成します。
!知らせ! :新しいエンティティクラスBoy.javaを作成するエンティティクラスは、プロジェクトAとBの位置で一貫している必要があります。つまり、パッケージ名は一貫している必要があります。このプロジェクトでは、boy.javaはプロジェクトAとb:com.fengdonghao.shiro.bean.boyをインポートしています。
エンティティクラスも一貫している必要があります。
パッケージcom.fengdonghao.shiro.bean; import javax.persistence。 *; import java.io.serializable;/** * @author:fdh * @description: * @date:in11:14 2017/12/16 */ @entitypublic class boy = private final serialisable @id @generatedvalue private int id;プライベート文字列名;プライベートインクエイジ; @Override public String toString(){return "boy {" + "age =" + age + "、id =" + id + "、name = '" + name +'/'' + '}'; } //ゲッターとセッターのメソッドはここで省略しています} 2>。プロデューサー(a)でメッセージキュー、スイッチ、バインドバインディングを構成し、例1の最初のステップは同じです
3>。次のように、RabbitController.javaに別のマッピングをプロデューサー(a)に書く
@RequestMapping( "/send")public void sendmessage(){boy boy = new boy(); boy.setname( "tim"); boy.setage(11); System.out.println(boy); //以下はシリアル化操作です// objectputStream oos = nullをファイルするためにobjを書き込みます。 try {oos = new objectOutputStream(new fileoutputStream(new file( "e://webpackage//a.txt"))); //このディレクトリoos.writeObject(boy); } catch(ioexception e){e.printstacktrace(); }最後に{ioutils.closequetly(oos); } rabbitmqservice.send( "オブジェクトはシリアル化されました"); 4>。消費者のバイト配列を脱上化します(b)。
レシーバーでは、たとえば1キーについてリスナーを書き直します
@rabbitlistener(queues = "topic.messages")public void process2(string str1){system.out.println(thread.currentthread()。 file file = new file( "e://webpackage//a.txt"); ObjectInputStream ois = null; try {ois = new ObjectInputStream(new FileInputStream(file)); boy newuser =(boy)ois.readobject(); System.out.println( "Desequence:"+newuser); System.out.println( "Desequence:"+newuser.getName()); System.out.println( "Desequence:"+newuser.getName()); system.out.println( "getage"+newuser.getage()); } catch(ioexception e){e.printstacktrace(); } catch(classNotFoundException e){e.printstacktrace(); }最後に{ioutils.closequetly(ois); try {fileutils.forcedelete(file); } catch(ioexception e){e.printstacktrace(); }} system.out.println( "messages:"+str1); }確認マッピング:IP:8080/send
結果は次のとおりです。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。