RabbitMq七种工作模式,结合简单的java实例使用,别再说你不会

本文介绍了RabbitMQ的七种工作模式,包括简单模式、工作队列、广播(fanout)、路由(direct)和话题(topic)。通过Java代码示例展示了如何在这些模式下创建生产者和消费者,以及如何使用RabbitmqConnectionUtil工具类简化连接管理。此外,还提到了RPC(远程过程调用)模式,并解释了RabbitMQ中交换机的角色和不同类型的交换机(如Direct, Fanout, Topic, Headers)的工作原理。" 112944859,10542783,MFC程序中CMyView类的实现与使用,"['MFC程序', 'C++', 'Windows开发', 'GUI编程']
摘要由CSDN通过智能技术生成

一、Maven依赖添加

com.rabbitmq

amqp-client

3.0.4

二、七种工作模式的java实例

1、简单模式

最简单的一个消费者和一个生产者模式,生产者生成消息,消费者监听消息,若是消费者监听到它所需要的消息,就会消费该消息,这种消息是次性的,被消费了就没有了。

 

1.1.1、EasyRecv.java

import com.rabbitmq.client.Channel;

import com.rabbitmq.client.Connection;

import com.rabbitmq.client.ConnectionFactory;

import com.rabbitmq.client.QueueingConsumer;

public class EasyRecv {

//队列名称

private final static String QUEUE_NAME ="hello world";

public static void main(String[] argv) throws java.io.IOException,java.lang.InterruptedException {

//打开连接和创建频道,与发送端一样

ConnectionFactory factory = new ConnectionFactory();

//设置RabbitMQ所在主机ip或者主机名

factory.setHost("127.0.0.1");

Connection connection = factory.newConnection();

Channel channel = connection.createChannel();

//声明队列,主要为了防止消息接收者先运行此程序,队列还不存在时创建队列。

/**

* 队列名

* 是否持久化

*  是否排外  即只允许该channel访问该队列   一般等于true的话用于一个队列只能有一个消费者来消费的场景

*  是否自动删除  消费完删除

*  其他属性

*

*/

channel.queueDeclare(QUEUE_NAME,false,false,false, null);

System.out.println("Waiting for messages. To exit press CTRL+C");

//创建队列消费者

QueueingConsumer consumer = new QueueingConsumer(channel);

//指定消费队列

/**

* 队列名

* 其他属性  路由

* 消息body

*/

channel.basicConsume(QUEUE_NAME,true, consumer);

while(true)

{

//nextDelivery是一个阻塞方法(内部实现其实是阻塞队列的take方法)

QueueingConsumer.Delivery delivery = consumer.nextDelivery();

String message = new String(delivery.getBody());

System.out.println("Received '"+ message +"'");

}

}

}

1.1.2、EasySend.java

import com.rabbitmq.client.Channel;

import com.rabbitmq.client.Connection;

import com.rabbitmq.client.ConnectionFactory;

import java.util.Scanner;

public class EasySend {

//队列名称

private final static String QUEUE_NAME ="hello world";

public static void main(String[] argv) throws java.io.IOException

{

/**

* 创建连接连接到MabbitMQ

*/

ConnectionFactory factory = new ConnectionFactory();

//设置MabbitMQ所在主机ip或者主机名

factory.setHost("127.0.0.1");

while(true){

//创建一个连接

Connection connection = factory.newConnection();

//创建一个频道

Channel channel = connection.createChannel();

//指定一个队列

channel.queueDeclare(QUEUE_NAME,false,false,false, null);

//发送的消息

Scanner scanner = new Scanner(System.in);

String ms = scanner.nextLine();

//String message ="hello world!";

//往队列中发出一条消息

channel.basicPublish("", QUEUE_NAME, null, ms.getBytes());

System.out.println("Sent '"+ ms +"'");

//关闭频道和连接

channel.close();

connection.close();

}

}

以上两个已经可以进行通信了,下面同样是简单的实例,但是我们可以看到在代码层面上,连接的代码都是一样的,所以我们可以创建一个连接的工具类。

1.2.1、RabbitmqConnectionUtil .java

import com.rabbitmq.client.Connection;

import com.rabbitmq.client.ConnectionFactory;

import java.io.IOException;

public  class RabbitmqConnectionUtil {

public static Connection getConnection() throws IOException {

//连接工厂

ConnectionFactory factory = new ConnectionFactory();

factory.setHost("localhost");

//连接5672端口  注意15672为工具界面端口  25672为集群端口

factory.setPort(5672);

//factory.setVirtualHost("/xxxxx");

// factory.setUsername("xxxxxx");

// factory.setPassword("123456");

//获取连接

Connection connection = factory.newConnection();

returnconnection;

}

}

1.2.2、UtilSend.java

import com.rabbitmq.client.Channel;

import com.rabbitmq.client.Connection;

import top.san.RabbitMq.util.RabbitmqConnectionUtil;

import java.io.IOException;

public class UtilSend {

private final static String QUEUE_NAME ="UtilConn";

public static void main(String[] args) throws IOException {

Connection connection = RabbitmqConnectionUtil.getConnection();        //创建通道

Channel channel = connection.createChannel();

//声明队列

channel.queueDeclare(QUEUE_NAME,false,false,false, null);

//消息内容

String message ="这里是lbw广场";

channel.basicPublish("", QUEUE_NAME,null,message.getBytes());

System.out.println("[x]Sent '"+message +"'");

//最后关闭通关和连接

channel.close();

connection.close();

}

}

1.2.3、UtilRecv.java

import com.rabbitmq.client.Channel;

import com.rabbitmq.client.Connection;

import com.rabbitmq.client.QueueingConsumer;

import top.san.RabbitMq.util.RabbitmqConnectionUtil;

import java.io.IOException;

public class UtilRecv {

private final static String QUEUE_NAME ="UtilConn";

public static void main(String[] args) throws IOException, InterruptedException {

Connection connection = null;

connection = RabbitmqConnectionUtil.getConnection();        //创建通道

Channel channel = connection.createChannel();

//声明队列

channel.queueDeclare(QUEUE_NAME,false,fa

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值