RabbitMq六种工作模式

这篇博客详细介绍了RabbitMQ的六种工作模式,包括Publish/Subscribe模式,用于广播消息;Work Queues模式,用于负载均衡任务;Routing模式,通过路由键分发消息;Topics模式,提供更灵活的消息过滤;以及如何在SpringBoot项目中整合使用RabbitMQ。
摘要由CSDN通过智能技术生成

Utils类


import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

public class RabbitMqUtils {
   

    public static ConnectionFactory getFactory() {
   
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("192.168.139.129");
        factory.setUsername("guest");
        factory.setPassword("guest");
        // 1 == > n
        factory.setVirtualHost("/");
        return factory;
    }

    public static Connection getConnection() throws IOException, TimeoutException {
   
        ConnectionFactory factory = getFactory();
        return factory.newConnection();
    }

    public static Channel getChannel() throws IOException, TimeoutException {
   
        Connection connection = getConnection();
        return connection.createChannel();
    }
}

Publish/Subscribe

publish


import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import utils.RabbitMqUtils;

public class EmitLog {
   

    private static final String EXCHANGE_NAME = "logs";


    public static void main(String[] argv) throws Exception {
   
        try (Connection connection = RabbitMqUtils.getConnection();
             Channel channel = connection.createChannel()) {
   

            {
   
                channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.FANOUT);
                channel.queueDeclare("email", true, false, false, null);
                channel.queueDeclare("phone", true, false, false, null);
                channel.queueBind("phone", EXCHANGE_NAME, "");
                channel.queueBind("email", EXCHANGE_NAME, "");
            }

            String message = argv.length < 1 ? "info: Hello Python!" :
                    String.join(" ", argv);

            channel.basicPublish(EXCHANGE_NAME, "", null, message.getBytes("UTF-8"));
            System.out.println(" [x] Sent '" + message + "'");
        }
    }

}


subscriber


import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.DeliverCallback;
import utils.RabbitMqUtils;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

public class ReceiveLogs {
   
    private static final String EXCHANGE_NAME = "logs";

    static Channel channel;

    private static String queueName = "email";

    static {
   
        try {
   
            channel = RabbitMqUtils.getChannel();
            channel.exchangeDeclare(EXCHANGE_NAME, BuiltinExchangeType.FANOUT);
            channel.queueDeclare(queueName, true, false, false, null);
            channel.queueBind(queueName, EXCHANGE_NAME, "");
        } catch (IOException e) {
   
            e.printStackTrace();
        } catch (TimeoutException e) {
   
            e.printStackTrace();
        }

    }

    public static 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值