1. 程式人生 > >rabbitmq用法--直接傳送訊息給佇列

rabbitmq用法--直接傳送訊息給佇列

rabbitmq 術語:

ConnectionFactory、Connection、Channel都是RabbitMQ對外提供的API中最基本的物件。

Connection是RabbitMQ的socket連結,它封裝了socket協議相關部分邏輯。

ConnectionFactory為Connection的製造工廠。


Channel是我們與RabbitMQ打交道的最重要的一個介面,我們大部分的業務操作是在Channel這個介面中完成的,包括定義Queue、定義Exchange、繫結Queue與Exchange、釋出訊息接收訊息等。

Queue(佇列)是RabbitMQ的內部物件,用於儲存訊息,用下圖表示。


多個消費者可以訂閱同一個Queue,這時Queue中的訊息會被平均分攤給多個消費者進行處理,而不是每個消費者都收到所有的訊息並處理。

第一種: 直接傳送訊息給佇列

直接傳送訊息給佇列不需要指定exchange ,預設為空。直接傳送訊息給佇列之前需要先建立此佇列。

程式碼如下:

private static final String HOST = "XXXX";

private static final String USERNAME = "xxx";
private static final String PASSWORD = "xxx";

public static void main(String[] args) throws 
IOException, TimeoutException { ConnectionFactory connectionFactory = new ConnectionFactory(); connectionFactory.setHost(HOST); connectionFactory.setUsername(USERNAME); connectionFactory.setPassword(PASSWORD); Connection connection = connectionFactory.newConnection(); Channel channel = connection.createChannel();
// 一定先建立佇列,否則系統不會報錯,但是資訊被丟棄了。
    channel.queueDeclare("WSX", false,false,false,null);
    channel.basicPublish("","WSX",null,"wsx".getBytes());
    channel.close();
    connection.close();
}
消費者consumer程式碼:這裡切記,接收到訊息之後要呼叫channel.basicAck 返回給伺服器已經接收到訊息,否則此訊息在佇列中不會刪除
public static void main(String[] args) throws IOException, TimeoutException {
    ConnectionFactory connectionFactory = new ConnectionFactory();
    connectionFactory.setHost(HOST);
    connectionFactory.setUsername(USERNAME);
    connectionFactory.setPassword(PASSWORD);
    Connection connection = connectionFactory.newConnection();
    Channel channel = connection.createChannel();
    channel.queueDeclare("WSX", false,false,false,null);
    channel.basicConsume("WSX",new ConsumerImpl(channel));
}

public class ConsumerImpl implements Consumer{

    private Channel channel;

    public ConsumerImpl(Channel channel){
        this.channel = channel;
    }

    public void handleConsumeOk(String consumerTag) {
        System.out.println("isOk");
    }

    public void handleCancelOk(String consumerTag) {

    }

    public void handleCancel(String consumerTag) throws IOException {

    }

    public void handleShutdownSignal(String consumerTag, ShutdownSignalException sig) {

    }

    public void handleRecoverOk(String consumerTag) {
        System.out.println("recoverOk");
    }

    public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
        System.out.println(new String(body));
        System.out.println(envelope.getDeliveryTag());
        channel.basicAck(envelope.getDeliveryTag(),false);
    }
}

相關推薦

rabbitmq用法--直接傳送訊息佇列

rabbitmq 術語: ConnectionFactory、Connection、Channel都是RabbitMQ對外提供的API中最基本的物件。 Connection是RabbitMQ的socket連結,它封裝了socket協議相關部分邏輯。 ConnectionFa

RabbitMQ初學之二:直接傳送訊息佇列

一. 背景   總前提:佇列無論是在生產者宣告還是在消費者宣告,只有聲明瞭,才能在RabbitMQ的管理介面看到該佇列   生產者直接傳送訊息到佇列,消費者直接消費佇列中的訊息,而不用指定exchange並繫結。這種需求下,分三種情況:① 生產者宣告佇列(指定佇列名稱),消費者不指定佇列,而是直接消費生產者指

RabbitMQ訊息通訊,生產者傳送訊息指定的消費者的訊息佇列

上一篇文章描述了,通過使用廣播式的通訊方式,讓生產者把訊息廣播給每一個消費者,本節我們介紹另外一個方式,生產者可以指定消費者,把訊息傳送給它: client.py #!/usr/bin/env python import pika import sys connectio

使用python定時傳送訊息微信好友

    以前以為微信沒有介面和python連線,但是最近發現了個庫wechat_sender,然後就稍微學習了下。還不深入,寫了一個簡易的測試程式作為初步進入。     需要用到的庫有 threading, wxpy前者需要用到Timer這個函式,作為定時

React Native之Android原生通過DeviceEventEmitter傳送訊息js

1 問題 Android原生向js發訊息,並且可以攜帶資料 2 實現原理 Android原生可以使用RCTEventEmitter來註冊事件,然後這裡需要指定事件的名字,然後在js那端進行監聽同樣事件的名字監聽,就可以收到訊息得到資料 Android註冊關

rabbitmq二---均勻分配訊息每個接收者,prefetchCount設定均勻分配的個數

傳送端的程式如下: channel.basicPublish("", TASK_QUEUE_NAME,MessageProperties.PERSISTENT_TEXT_PLAIN, message.getBytes()); //傳送(使用預設交換機,routing-k

python傳送訊息微信好友

咱們就直接上程式碼啦! import itchat import requests import re def login_sendmsg(text): itchat.login() # 只是普通的登陸,並不具有快取的功能 itchat.auto_login(hotReload=T

iOS APP調取簡訊 傳送訊息其他人

 if( [MFMessageComposeViewController canSendText]) {             MFMessageComposeViewController * controller = [[MFMessageComposeViewCont

微信公眾號傳送訊息使用者 php

1.微信公眾號 這裡得話 一開始先去看了 微信公眾號的介面 發現網頁授權需要時認證的服務號,一開始想的是那去申請一個認證的服務號豈不是很費事,然後網上搜了搜,發現了還有微信公眾號個人測試號這個東西,所有的介面都可以使用(據說是這樣),然後就開始去學習使用微信公眾號個人測試號的使用; 個人測試號網址: http

微信公眾號傳送模板訊息使用者

步驟 1.新增模板訊息功能  2.從模板庫中選擇自己合適的模板 3. 公共方法funtion.php中(thinkphp3.2框架) //模板公共方法 function rz_msg($openid,$temid,$first,$keyword1,$keywor

rabbitmq 傳送訊息格式注意

在rabbitmq的網頁版中,有publish ,用了傳送。 delivery_mode: 2 headers: content_type:

rabbitmq和redis用作訊息佇列的區別

將redis釋出訂閱模式用做訊息佇列和rabbitmq的區別: 可靠性   redis :沒有相應的機制保證訊息的可靠消費,如果釋出者釋出一條訊息,而沒有對應的訂閱者的話,這條訊息將丟失,不會存在記憶體中;rabbitmq:具有訊息消費確認機制,如果釋出一條訊息,還沒有消費者消費該佇

Java模擬壓測裝置傳送訊息到伺服器(Rabbitmq) python模擬上報訊息rabbitMQ(protobuf)

進入idea,新建一個maven專案 主要是模擬150個裝置同時併發,併發時間持續15min 1.建立客戶端,構造請求傳送到對應的rabbitmq的佇列,用的protobuf協議。 import com.google.protobuf.ByteString; import com.

Kafka、RabbitMQ、RocketMQ等訊息中介軟體的對比 —— 訊息傳送效能和區別

分散式系統中,我們廣泛運用訊息中介軟體進行系統間的資料交換,便於非同步解耦。現在開源的訊息中介軟體有很多,前段時間我們自家的產品 RocketMQ (MetaQ的核心) 也順利開源,得到大家的關注。 那麼,訊息中介軟體效能究竟哪家強? 帶著這個疑問,我們中介軟體測

RabbitMQ 的六種訊息佇列

1.簡單模式 1.1建立連線: 1.2傳送訊息建立佇列過程: 1.3消費者 2.Work模式 一個生產者,多個消費者,每個消費者獲取到的訊息唯一。 2.1 生產者  2.2 消費者1 2.3 消費者2 3. 訂閱模式 一個生

嵌入式Linux併發程式設計,程序間通訊方式,System V IPC,訊息佇列,開啟/建立msgget(), 傳送訊息msgsnd(),格式,接收訊息msgrcv(),控制訊息佇列 msgctl()

文章目錄 1,訊息佇列 2,訊息佇列結構 3,訊息佇列使用步驟 3.1,開啟/建立訊息佇列 msgget() 3.1.1,開啟/建立訊息佇列---示例msgget() 3.2,向訊息佇列傳送訊息 msgs

RabbitMQ的學習(三):RabbitMQ不同的交換機配合路由鍵傳送訊息

前言:前面兩章我們已經開始了從安裝到編寫簡單的demo的過程: RabbitMQ的學習(一):Windows下安裝及配置RabbitMQ,erlang環境變數 RabbitMQ的學習(二):簡單的java demo實現RabbitMQ的傳送與接收 學習本章,需要了

Java--對接微信第二篇之訂閱傳送圖文訊息使用者

在第二篇的基礎上,把訂閱響應事件下的,傳送文字訊息介面替換成傳送圖文訊息的介面。 // 建立圖文訊息 NewsMessage newsMessage = new NewsMessage();

微信裡面的簽到加積分介面(已經測試過沒問題)服務號不能每天傳送訊息,為了避免這個,每天簽到的時候,推送一條最新的訊息客戶。

  public string QianDao(string WeiXinId, string key)//引數是微訊號         {             strs = WeiXinId.Trim() + "WJXFGCLN+Mihaha";          

電商之梳理rabbitmq相關知識---通訊--訊息佇列

rabbitmq 編輯 MQ全稱為Message Queue, 訊息佇列(MQ)是一種應用程式對應用程式的通訊方法。應用程式通過讀寫出入佇列的訊息(針對應用程式的資料)來通訊,而無需專用連線來連結它們。訊息傳遞指的是程式之間通過在訊息中傳送資料進行通訊,而不是