javascript
Spring Boot笔记-发送消息给RabbitMQ
目錄
?
?
基本概念
代碼及演示
?
基本概念
RabbitMQ
消息中間件是在消息的傳輸過程中保存消息的容器。消息中間件充當(dāng)中間人的作用將源消息發(fā)送到目標(biāo)消息。
隊列的主要目的是提供路由并保證消息的傳遞;如果發(fā)送消息時接受者不可用,消息隊列會保留消息,直到可以成功地傳遞它為止,當(dāng)然,消息隊列保存消息有期限。
應(yīng)用程序和應(yīng)用程序調(diào)用關(guān)系為松耦合關(guān)系
發(fā)送者和接受者不必了解對方、只需要確認(rèn)消息,發(fā)送者和接受者不必同時在線;
?
點對點模型:
? ? ? ? ? 1. 每個消息只能用一個消費者;
? ? ? ? ? 2. 發(fā)送者和接受者沒有時間依賴;
? ? ? ? ? 3. 接受者確認(rèn)消息接收和處理成功;
發(fā)布者/訂閱者模型:
發(fā)布者需要建立一個訂閱(subscription)以便訂閱者訂閱。訂閱者必須保存持續(xù)的活動狀態(tài)以接收消息,除非訂閱者建立了持久的訂閱。在這種情況下,在訂閱者未連接時發(fā)布的消息在訂閱者重新連接時發(fā)布
? ? ? ? ? 1. 每個消息可以有多個訂閱者;
? ? ? ? ? 2. 客戶端只有訂閱后才能接收到消息;
? ? ? ? ? 3. 持久訂閱和非持久訂閱;
?
代碼及演示
RabbitMQ設(shè)置如下:
交換機通過綁定隊列,并且設(shè)置Routing key把獲取的消息放到指定的隊列中,
order.* 可以匹配order.xxxx的信息,不能匹配order.xxx.xxx
而order.#可以匹配order.xxx.xxx等數(shù)據(jù)
?
目前的隊列如下:
使用Spring Boot發(fā)送數(shù)據(jù)后:
Spring Boot結(jié)構(gòu)如下:
Order.java
package productor.demo.entity;import java.io.Serializable;public class Order implements Serializable {private static final long serialVersionUID = -1234567891234332445L;private String id;private String name;private String messageId; //存儲消息發(fā)送的唯一IDpublic Order(){}public Order(String id, String name, String messageId) {this.id = id;this.name = name;this.messageId = messageId;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getMessageId() {return messageId;}public void setMessageId(String messageId) {this.messageId = messageId;} }OderSender.java
package productor.demo.produce;import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.amqp.rabbit.support.CorrelationData; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import productor.demo.entity.Order;@Component public class OderSender {@Autowiredprivate RabbitTemplate rabbitTemplate;public void send(Order order) throws Exception{CorrelationData correlationData = new CorrelationData();correlationData.setId(order.getMessageId());rabbitTemplate.convertAndSend("order-exchange", //exchange"order.abcd", //routingKeyorder, //消息體correlationData); //correlationData消息唯一ID} }application.properties
server.port=8001spring.rabbitmq.addresses=192.168.164.141:5672 spring.rabbitmq.username=guest spring.rabbitmq.password=guest spring.rabbitmq.virtual-host=/ spring.rabbitmq.connection-timeout=15000DemoApplicationTests.java
package productor.demo;import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import productor.demo.entity.Order; import productor.demo.produce.OderSender;import java.util.UUID;@RunWith(SpringRunner.class) @SpringBootTest public class DemoApplicationTests {@Autowiredprivate OderSender oderSender;@Testpublic void contextLoads() {}@Testpublic void testSend1()throws Exception{Order order = new Order();order.setId("20180618000000000002");order.setName("測試訂單2");order.setMessageId(System.currentTimeMillis() + "$" + UUID.randomUUID().toString());oderSender.send(order);}}porn.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.sxw</groupId><artifactId>springboot-rabbitmq</artifactId><packaging>jar</packaging><version>1.0-SNAPSHOT</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.4.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.0.29</version></dependency><dependency><groupId>com.github.miemiedev</groupId><artifactId>mybatis-paginator</artifactId><version>1.2.17</version><exclusions><exclusion><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId></exclusion></exclusions></dependency><!--工具類依賴包--><dependency><groupId>org.apache-commons</groupId><artifactId>commons-lang3</artifactId></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.49</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><scope>provided</scope></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>?
總結(jié)
以上是生活随笔為你收集整理的Spring Boot笔记-发送消息给RabbitMQ的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 系统架构师学习笔记-系统开发基础知识(一
- 下一篇: Java笔记-RabbitMQ中生产者端