인터넷에 RabbitMQ의 설치 방법에 대한 많은 튜토리얼이 있으므로 여기에서 반복하지 않을 것입니다.
RabbitMQ를 사용하여 SpringBoot에서 문자열과 물체를 전송하십시오. 이 기사에서 제공되는 예는 두 개의 다른 프로젝트 사이에서 객체와 문자열을 전송하는 것입니다.
RabbitMQ 의존성 (두 프로젝트 모두에서 동일한 구성) :
<pectionency> <groupId> org.springframework.boot </groupid> <artifactid> 스프링 부트 스타터-amqp </artifactid> </fectionency>
POM 구성 파일 (두 프로젝트 모두에서 동일한 구성) :
spring.application.name : demo1 // project name spring.rabbitmq.host : 192.168.1.111 // 자신의 ipspring.rabbitmq.port : 5672spring.rabbitmq.username : Guestspring.rabbitmq.password : Guestspring.rabbitmq.virtual-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.spramframework.amqp.core.topicexchange; import org.springframework.beans.bean.annotation.qualifier; import org.springframework.context.annotation.bean; import org.sprameframework.context.annotation.configuration;/** * @author : fdh * @description : * @date : 16.13/12222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 SenderConFigration {/** *@description : 새 대기열 주제 만들기 .messages *@data : 16 : 14 2017/12/22 */@bean (name = "message") public queue queuemessages () {return new queue ( "topic.messages"); }/***@description : 스위치 정의*@data : 16 : 15 2017/12/22*/@bean public topicexchange exchange () {return new topicexchange ( "Exchange"); }/** *@description : 스위치는 큐 바인드 큐 바인드 큐가 주제와 함께 스위치를 바인딩합니다. Messages *@data : 16 : 18 2017/12/22 */@bean 바인딩 바인딩 넥션 체인지 (@qualifier ( "메시지") Queue Queuemessages, topicexchange exchange) {return bindingBuilder.bind (queuemessages) .to (exchange) .with ( "topic.messages"); }}2>. 두 번째 단계 (항목 A)에서 프로듀서는 메시지를 메시지 큐로 보냅니다.
/** * @author : fdh * @description : * @date : 14:15 2017/12/22 */ @controllerpublic 클래스 RabbitController {@autowired private amqptemplate amqptemplate; @requestmapping ( "/sends") public void send1 () {amqptemplate.convertandsend ( "exchange", "topic.messages", "hello topic.messages rabbitmq"); }}3>. 다음으로 소비자 (프로젝트 B) 측에 청취자를 작성하십시오. 스위치는 프로듀서가 생성 한 메시지를 바운드 라우팅 키 (Topic.Messages)를 기반으로 일치하는 메시지 큐에 배치합니다. 리스너는 해당 메시지 큐를 듣고 메시지 큐로 라우팅 된 메시지를 얻습니다.
import org.springframework.bean.beans.annotation.autowired; import org.springframework.stereotyp.component; import org.springframework.amqp.rabbit.annotation.rabbitlistener;/*** @ aworge : fdh* @ description : message queue lurter* @ date : 14:19 2017/12/22에서 생성. */ @componentPublic 클래스 수신기 {@RabbitListener (queues = "topic.messages") public void process2 (String str1)는 classNotFoundException {System.out.println ( "메시지 :"+str1); System.out.println (thread.currentthread (). getName ()+"주제에서 메시지를 받았습니다 .message queue :"+str1); } 이런 식으로 간단한 문자열 전송이 작성됩니다. 방금 정의 된 매핑을 열어 보겠습니다 : 192.168.1.111:8080/sendss
소비자 측의 콘솔 창에 인쇄 된 메시지가 표시됩니다.
위는 현을 전송하는 간단한 예입니다.
2. 다음은 소비자와 생산자 사이의 물체의 전송에 중점을 둡니다.
객체의 전송은 생산자 (a)에서 직렬화되어야합니다. 직렬화 및 사제화를위한 많은 방법이 있으며 여기서는 Java의 직렬화 가능한 인터페이스를 사용합니다.
1>. 프로듀서 프로젝트 (프로젝트 A) 및 소비자 (프로젝트 B)에서 엔티티 클래스를 만듭니다.
! 알아채다! : 새 엔티티 클래스 Boy.java 엔티티 클래스는 프로젝트 A와 B의 위치에서 일관성이 있어야합니다. 즉, 패키지 이름은 일관성이 있어야합니다. 이 프로젝트에서 Boy.java는 프로젝트 A 및 B에 있습니다. import com.fengdonghao.shiro.bean.boy;
엔티티 클래스도 일관성이 있어야합니다.
package com.fengdonghao.shiro.bean; import javax.persistence. *; import java.io.serializable;/** * @author : fdh * @description : * @date : in11 : 14 2017/12/16 */ @entitypublic boy emplements serializable {private long serial vable v; @id @generatedvalue private int id; 개인 문자열 이름; 사적인 int 연령; @override public String toString () {return "boy {" + "age =" + age + ", id =" + id + ", name = ' + name +'/'' + '}'; } // getter and setter 메소드가 여기에서 생략됩니다} 2>. 제작자 (a)에서 메시지 큐, 스위치 및 바인딩 바인딩을 구성하고 예 1의 첫 번째 단계는 동일합니다.
3>. 다음과 같이 프로듀서 (A)의 RabbitController.java에 다른지도를 작성하십시오.
@requestmapping ( "/send") public void sendmessage () {Boy Boy = new Boy (); Boy.setName ( "TIM"); Boy.Setage (11); System.out.println (Boy); // 다음은 직렬화 작업입니다. // objectputStream oos = null을 파일로 작성하십시오. try {oos = new ObjectOutputStream (new FileOutputStream ( "e : //webpackage//a.txt")); //이 디렉토리 oos.writeObject (Boy)에 직렬화 된 바이트 배열을 임시로 저장합니다. } catch (ioexception e) {e.printstacktrace (); } 마침내 {ioutils.closequietly (oos); } rabbitmqservice.send ( "개체는 직렬화되었습니다"); 4>. 소비자의 바이트 배열을 제외하십시오 (b).
수신기에서는 리스너를 예를 들어 1 키를 다시 작성하십시오
@RabbitListener (queues = "topic.messages") public void process2 (String str1) {system.out.println (thread.currentThread (). getName ()+"Topic.Message Queue :"+str1+"및 deserialize"); 파일 = 새 파일 ( "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 이후의 desequence"+newuser.getage ()); } catch (ioexception e) {e.printstacktrace (); } catch (classNotFoundException e) {e.printstacktrace (); } 마침내 {ioutils.closequietly (OIS); try {fileUtils.forcedElete (파일); } catch (ioexception e) {e.printstacktrace (); }} system.out.println ( "메시지 :"+str1); } 확인 매핑 : IP : 8080/Send
결과는 다음과 같습니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.