介绍
消息队列是一个广泛使用的技术,它可以在不同应用之间传递消息。当一个应用程序需要向其他应用程序发送消息时,它可以将消息推送到消息队列中,然后消息队列将负责将消息传递给接收方应用程序。这种异步通信模式使得系统更加可靠和可扩展。
RabbitMQ和ActiveMQ是两个流行的消息队列实现,它们都是开源软件。在本文中,我们将探讨如何在Linux上使用RabbitMQ和ActiveMQ来设置消息队列。
安装 RabbitMQ
要在Linux上安装RabbitMQ,我们需要添加RabbitMQ存储库。我们可以通过使用以下命令添加存储库:
sudo rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.ascsudo tee /etc/yum.repos.d/rabbitmq.repo <
[rabbitmq-server]
name=rabbitmq-server
baseurl=https://dl.bintray.com/rabbitmq/rpm/rabbitmq-server/v3.6.x/el/7/
gpgcheck=0
enabled=1
EOF
我们已经添加了存储库,现在可以安装RabbitMQ。我们可以使用以下命令来安装:
sudo yum update -ysudo yum install rabbitmq-server
RabbitMQ安装后,我们需要启动该服务。我们可以使用以下命令来启动RabbitMQ服务:
sudo systemctl start rabbitmq-serversudo systemctl enable rabbitmq-server
我们可以使用以下命令来检查RabbitMQ状态:
sudo systemctl status rabbitmq-server现在,RabbitMQ已经安装在您的Linux系统上并可以使用。
使用 RabbitMQ
在使用RabbitMQ之前,我们需要创建一个虚拟主机和一个用户。我们可以使用以下命令创建虚拟主机和用户:
sudo rabbitmqctl add_vhost myvhostsudo rabbitmqctl add_user myuser mypassword
sudo rabbitmqctl set_permissions -p myvhost myuser ".*" ".*" ".*"
现在我们已经创建了虚拟主机和用户,让我们尝试向RabbitMQ发送和接收消息。
首先,我们需要使用以下命令启动RabbitMQ Web管理界面:
sudo rabbitmq-plugins enable rabbitmq_managementsudo systemctl restart rabbitmq-server
现在,我们可以在浏览器中打开"http://your_server_ip:15672",使用先前创建的用户名和密码登录。
现在,我们要使用Python发送消息到一个称为“myqueue”的队列中,我们可以使用以下Python代码:
import pikaconnection = pika.BlockingConnection(pika.ConnectionParameters(
host='localhost'))
channel = connection.channel()
channel.queue_declare(queue='myqueue')
channel.basic_publish(exchange='',
routing_key='myqueue',
body='Hello World!')
print(" [x] Sent 'Hello World!'")
connection.close()
现在,我们收到了一个消息,我们可以使用以下Python代码将消息输出到控制台:
import pikaconnection = pika.BlockingConnection(pika.ConnectionParameters(
host='localhost'))
channel = connection.channel()
channel.queue_declare(queue='myqueue')
def callback(ch, method, properties, body):
print(" [x] Received %r" % body)
channel.basic_consume(callback,
queue='myqueue',
no_ack=True)
print(' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()
现在您已经成功地使用RabbitMQ在Linux上设置了一个消息队列。
安装 ActiveMQ
要在Linux上安装ActiveMQ,我们需要先下载并解压它。我们可以使用以下命令下载并解压ActiveMQ:
wget "http://mirrors.hust.edu.cn/apache//activemq/5.16.0/apache-activemq-5.16.0-bin.tar.gz" -O - | tar -xz我们已经将ActiveMQ解压缩到当前目录下的apache-activemq-5.16.0文件夹中。现在,我们可以使用以下命令启动ActiveMQ服务:
cd apache-activemq-5.16.0/bin./activemq start
现在,ActiveMQ已经启动并可以使用。
使用 ActiveMQ
首先,我们需要使用浏览器打开"http://your_server_ip:8161/admin",使用默认的用户名和密码登录。
现在,我们可以在“Queues”选项卡中创建一个新队列。我们将队列命名为“myqueue”。
现在,我们要使用Java发送消息到该队列,我们可以使用以下Java代码:
import javax.jms.ConnectionFactory;import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnectionFactory;
public class Producer {
public static void main(String[] args) throws JMSException {
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
javax.jms.Connection connection = connectionFactory.createConnection();
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
javax.jms.Queue queue = session.createQueue("myqueue");
MessageProducer producer = session.createProducer(queue);
TextMessage message = session.createTextMessage();
message.setText("Hello World!");
producer.send(message);
System.out.println("Sent message '" + message.getText() + "'");
connection.close();
}
}
现在,我们已经成功地向队列发送了一个消息。我们可以使用以下Java代码来接收消息:
import javax.jms.ConnectionFactory;import javax.jms.JMSException;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnectionFactory;
public class Consumer {
public static void main(String[] args) throws JMSException {
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
javax.jms.Connection connection = connectionFactory.createConnection();
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
javax.jms.Queue queue = session.createQueue("myqueue");
MessageConsumer consumer = session.createConsumer(queue);
TextMessage message = (TextMessage) consumer.receive();
System.out.println("Received message '" + message.getText() + "'");
connection.close();
}
}
现在,我们已经成功地在Linux上使用ActiveMQ设置了消息队列。
结论
消息队列是一种强大的技术,它可以帮助您在不同的应用程序之间进行通信。RabbitMQ和ActiveMQ是两个流行的消息队列实现,它们都是开源软件。在本文中,我们已经讨论了如何在Linux上使用RabbitMQ和ActiveMQ设置消息队列,以及如何使用Python和Java向队列发送和接收消息。