1. 程式人生 > >RabbitMQ 例項(一對一、一對多、多對多、多對一)

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