RabbitMQ 例項(一對一、一對多、多對多、多對一)
原理就不說了,自己先百度。 我們不做理論高手, 我們要實戰。
現在網上的部落格太混亂了,有些貼出來完全是錯誤的,很容易誤導我們理解。
我這裡主要是分享程式碼,讓你們在電腦上跑起來。
目錄結構如下:
1.我們先看pom.xml
<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.broadtech</groupId> <artifactId>springboot-rabbitmq</artifactId> <version>0.0.1-SNAPSHOT</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.4.0.RELEASE</version> </parent> <properties> <java.version>1.8</java.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> <scope>true</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 新增springboot對amqp的支援 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <scope>provided</scope> </dependency> <!-- https://mvnrepository.com/artifact/com.rabbitmq/amqp-client --> <dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> <version>3.6.5</version> </dependency> </dependencies> </project>
2.看 application.properties
spring.application.name=springboot-rabbitmq
spring.rabbitmq.host=127.0.0.1
spring.rabbitmq.port=5672
spring.rabbitmq.username=mengl
spring.rabbitmq.password=123456
#spring.rabbitmq.publisher-confirms=true
#spring.rabbitmq.virtual-host=/
3.Application.java
package com.rabbit; import org.springframework.amqp.core.Queue; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.context.annotation.Bean; @SpringBootApplication(exclude = DataSourceAutoConfiguration.class) public class Application { public final static String HELLO = "helloQueue1"; public static void main(String[] args) throws Exception { SpringApplication.run(Application.class, args); } @Bean public Queue helloQueue() { return new Queue(Application.HELLO); // 1 } @Bean public Queue userQueue() { return new Queue("user"); } }
4. 下面是生產 sender 和消費 receiver
4.1 HelloReceiver1.java
package com.rabbit.hello; import org.springframework.amqp.rabbit.annotation.RabbitHandler; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; import com.rabbit.Application; @Component @RabbitListener(queues = Application.HELLO) //3 public class HelloReceiver1 { @RabbitHandler public void process(String hello) { System.out.println("Receiver1 : " + hello); } }
4.2 HelloReceiver2.java
package com.rabbit.hello;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
import com.rabbit.Application;
@Component
//@RabbitListener(queues = Application.HELLO)
public class HelloReceiver2 {
@RabbitHandler
public void process(String hello) {
System.out.println("Receiver2 : " + hello);
}
}
4.3 HelloSender1.java
package com.rabbit.hello;
import java.util.Date;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.rabbit.Application;
@Component
public class HelloSender1 {
@Autowired
private AmqpTemplate rabbitTemplate;
public void send(String msg) {
String sendMsg = "hello孟樑,你在測試MQ " + new Date();
System.out.println("Sender1 : " + sendMsg);
rabbitTemplate.convertAndSend(Application.HELLO, sendMsg); // 4
}
}
4.4 HelloSender2.java
package com.rabbit.hello;
import java.util.Date;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.rabbit.Application;
@Component
public class HelloSender2 {
@Autowired
private AmqpTemplate rabbitTemplate;
public void send(String msg) {
String sendMsg = msg + new Date();
System.out.println("Sender2 : " + sendMsg);
this.rabbitTemplate.convertAndSend(Application.HELLO, sendMsg);
}
}
5. 下面是controller
5.1 RabbitTest.java
package com.rabbit.controller;
import org.springframework.amqp.core.Queue;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.rabbit.hello.HelloSender1;
import com.rabbit.hello.HelloSender2;
@RestController
@RequestMapping("/rabbit")
public class RabbitTest {
@Autowired
private HelloSender1 helloSender1;
@Autowired
private HelloSender2 helloSender2;
@GetMapping("/hello")
public String hello() {
helloSender1.send("a");
return "/rabbit/hello的呼叫";
}
/**
* 單生產者-多消費者
*/
@GetMapping("/oneToMany")
public void oneToMany() {
for(int i=0;i<10;i++){
System.out.println("執行"+i);
helloSender1.send("hellomsg:"+i);
}
}
/**
* 多生產者-多消費者
*/
@GetMapping("/manyToMany")
public void manyToMany() {
for(int i=0;i<10;i++){
helloSender1.send("hellomsg:"+i);
helloSender2.send("hellomsg:"+i);
}
}
}
6.測試頁面 + 控制檯顯示。
一對一:
一對多: ( 即1個生產者提供10個棒棒糖,2個消費者平均每人分5個棒棒糖)
多對多: (生產者2個,消費者2個, 都是平均分配)
多對一:(省略。同上)
總結:
相關推薦
RabbitMQ 例項(一對一、一對多、多對多、多對一)
原理就不說了,自己先百度。 我們不做理論高手, 我們要實戰。 現在網上的部落格太混亂了,有些貼出來完全是錯誤的,很容易誤導我們理解。 我這裡主要是分享程式碼,讓你們在電腦上跑起來。 目錄結構如下: 1.我們先看pom.xml <project xm
java-mybaits-00502-案例-映射分析-一對一、一對多、多對多
per username nfa view 2.3 puts opened org double 1、一對一查詢【類屬性即可,association 】 案例:查詢所有訂單信息,關聯查詢下單用戶信息。 註意:因為一個訂單信息只會是一個人下的訂單,所以從查詢
mybatis3.2.7應用_高級映射(一對一、一對多、多對多)
mybatis3 單個 所有 由於 單表 myba 用戶 記錄 text 1. 一對一查詢 需求:查詢訂單信息,關聯查詢創建訂單的用戶信息 1.1 使用resultType實現 1.1.1 sql語句 確定查詢的主表:訂單表 確定查詢的關聯表:用戶表
mybatis 詳解(七)------一對一、一對多、多對多
不變 角色 導入 ctu transacti stat 工程 build -1 前面幾篇博客我們用mybatis能對單表進行增刪改查操作了,也能用動態SQL書寫比較復雜的sql語句。但是在實際開發中,我們做項目不可能只是單表操作,往往會涉及到多張表之間的關聯操作。那麽我
mybatis 一對一、一對多、多對一、多對多
bigint into rem http depend path spa records 數據庫表 本項目是 框架架構是 springboot+mybatis 添加maven依賴 <dependency> <groupId>org.mybat
數據表對應關系(一對一、一對多、多對多)
結果 ng- 垂直切分 包含 varchar 商品 記錄 padding borde ? 前言 本文主要介紹數據表的關聯關系,這是數據庫設計的常見問題之一。一個好的表結構設計,可以減少一些不必要的表或字段等。數據表之間的關聯關系分為三種:一對一、一對多、多對多。下面就逐一
關於TP5的一對一、一對多同時存在的關聯查詢
clas sql one ID tro test tp5 uid turn 主表SQL(tp_member) CREATE TABLE `tp_member` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT ‘主鍵id‘,
JAVA框架 Mybaits 一對一、一對多
AR 分享圖片 put 一個 exceptio pri type tom RR 一:闡述 我們在日常操作的時候,很多時候會遇到多表聯合查詢,由於參照物的不通 ,會出現一對一、一對多的情況。比如說:賬號信息和訂單表,從訂單表角度和賬號信息是一對一的情況(一個訂單只能是一個用戶
mybatis之級聯關系(一對一、一對多)
res cit tar country 參考 ace ctype ride turn 1. 一對一關系 1.1 entiry 1.1.1 TPersonInfo.java package com.blueStarWei.entity; pub
spring data jpa關聯查詢(一對一、一對多、多對多)
sse eager save net array ota println ack generate 在實際過往的項目中,常用的查詢操作有:1、單表查詢,2、一對一查詢(主表和詳情表)3、一對多查詢(一張主表,多張子表)4、多對多查詢(如權限控制,用戶、角色多對多)。做個
使用GreenDao建立表、關聯表(一對一,一對多,多對多)、CURD、升級資料庫等操作
應用場景:從照片中找出包含有使用者人臉的照片,並儲存該照片中的人臉特徵、使用該特徵和使用者人臉特徵對比,滿足條件,照片就儲存到該使用者表裡 一、建立表 GreenDao託管地址:https://github.com/greenrobot
【轉】資料庫一對一、一對多、多對多關係
轉自:https://blog.csdn.net/u013144287/article/details/79024130 本來資料庫一對一、一對多、多對多關係並不複雜,但是最近在理解的時候感覺又感覺多了寫新意,所以現在在來總結一下吧 一、首先給出三種關係的例項 1、一對一關係例項 &
MyBatis基於註解的一對一、一對多和多對多的關係
“今年春盡,楊花似雪,猶不見還家” 前言 之前說了MyBatis常用註解 和基於註解的簡單增刪改查操作。 現在來了解下MyBatis基於註解的一對一、一對多和多對多的關係。 示例 一對一:一個人只有一個身份證號 PersonMapper .java im
Django 一對一,一對多,多對多 操作、常用方法
幾對幾的模型結構的使用場景為:一般根據業務需求,同一業務,需要向相關聯的多表插入刪除資料時,會用到。 一對一: 建立一個使用者表 class Users(models.Model): username = models.CharField(max_length=20,null=true,blank
JPA表關聯關係(多對一、一對多、多對多、一對一)
小提示:外來鍵在哪邊,那邊就是多方哦!! 單向多對一: 給多方加上 @ManyToOne ex:【產品類Product--多方 ,產品分類ProductDir--一方】 單向一對多:給一方加上 @OneToMany ex
MyBatis學習總結(九)---基於XML多表聯合查詢(一對一、一對多、多對多)
1、一對一的關聯 使用association,association元素用於處理“has-one”(一對一)這種型別關係。 作用:針對pojo物件屬性的對映,它的兩個主要引數此時對應的值: javaType對應pojo類名, property對應pojo的
javaEE Mybatis,一對一、一對多關聯查詢,resultMap配置關聯屬性的對映
OrderMapper.xml(實體類的Sql配置檔案,resultMap配置一對一、一對多關聯屬性的對映): <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//
MyBatis一對一、一對多、多對多級聯查詢
0.準備工作: 建立Mysql表 1.引入maven依賴:其中包括mybatis本身和逆向工程生成依賴 <dependencies> <dependency> <groupId>junit</groupId>
Mybatis一對一、一對多關聯對映
這裡拿學生和班級比喻: 一個班級有多個學生,這裡是一對多。 學生所在的班級,是多對一,其實可以理解為一對一。 1、一對多 Student類: public class Students { private Integer id; private String name;
Mybatis 一對一、一對多、多對一
靈感來源於:https://www.cnblogs.com/xdp-gacl/p/4264440.html 轉發自:https://www.cnblogs.com/hq233/p/6752335.html 首先 資料庫量表之間欄位關係(沒有主外來鍵) studentmajor