1. 程式人生 > 程式設計 >Vue中computed和watch有哪些區別

Vue中computed和watch有哪些區別

RabbitMQ 訊息佇列介紹

RabbitMQ也是訊息佇列,那RabbitMQ和之前python的Queue有什麼區別麼?

py 訊息佇列:
    執行緒 queue(同一程序下執行緒之間進行互動)
    程序 Queue(父子程序進行互動 或者 同屬於同一程序下的多個子程序進行互動)

如果是兩個完全獨立的python程式,也是不能用上面兩個queue進行互動的,或者和其他語言互動有哪些實現方式呢。
【Disk、Socket、其他中介軟體】這裡中介軟體不僅可以支援兩個程式之間互動,可以支援多個程式,可以維護好多個程式的佇列。

像這種公共的中介軟體有好多成熟的產品:
RabbitMQ
ZeroMQ
ActiveMQ
……

RabbitMQ:erlang語言 開發的。
Python中連線RabbitMQ的模組:pika 、Celery(分散式任務佇列) 、haigha
可以維護很多的佇列

RabbitMQ 教程官網:http://www.rabbitmq.com/getstarted.html

幾個概念說明:

Broker:簡單來說就是訊息佇列伺服器實體。
Exchange:訊息交換機,它指定訊息按什麼規則,路由到哪個佇列。
Queue:訊息佇列載體,每個訊息都會被投入到一個或多個佇列。
Binding:繫結,它的作用就是把exchange和queue按照路由規則繫結起來。
Routing Key:路由關鍵字,exchange根據這個關鍵字進行訊息投遞。
vhost:虛擬主機,一個broker裡可以開設多個vhost,用作不同使用者的許可權分離。
producer:訊息生產者,就是投遞訊息的程式。
consumer:訊息消費者,就是接受訊息的程式。
channel:訊息通道,在客戶端的每個連線裡,可建立多個channel,每個channel代表一個會話任務

RabbitMQ基本示例

生產者

send.py

'''生產者的意思,也可以稱為傳送者,例項中表現為send.py'''

import pika
import random

# 新建連線,rabbitmq安裝在本地則hostname為'localhost'
hostname='localhost'
parameters = pika.ConnectionParameters(hostname)  # 引數
connection = pika.BlockingConnection(parameters)  # 連線

# 建立通道
channel = connection.channel()
# 宣告一個佇列,生產者和消費者都要宣告一個相同的佇列,用來防止萬一某一方掛了,另一方能正常執行 channel.queue_declare(queue='aaa') number = random.randint(1,1000) body = f'hello world {number}' # 交換機;佇列名,寫宣告將訊息發往那個佇列;訊息內容 # routing_key在使用匿名交換機的時候才需要制定,表示傳送到那個佇列 channel.basic_publish(exchange='', routing_key='aaa', body=body) print(f'sent,{body}') connection.close()

消費者

receive.py

'''消費者的意思,也可以稱為接收者,例項中表現為receive.py'''

import pika # pika非同步

# 新建連線,rabbitmq安裝在本地則hostname為'localhost'
hostname = 'localhost'
parameters = pika.ConnectionParameters(hostname)  # 引數: 傳遞使用者名稱和密碼的物件(https://blog.csdn.net/comprel/article/details/94662916)
connection = pika.BlockingConnection(parameters)  # 連線

# 建立通道
channel = connection.channel()
channel.queue_declare(queue='aaa')

def callback(ch, method, properties, body):
    print(4,body)

# 告訴rabbitmq使用callback來接收資訊
channel.basic_consume('aaa',callback,False)
# 開始接收資訊,並進入阻塞狀態,佇列裡有資訊才會呼叫callback進行處理,按ctrl+c退出
print (' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()