Java最新面试官问:RabbitMQ 如何实现对同一个应用的多个节点进行广播,githubjava面试手册

技术学习总结

学习技术一定要制定一个明确的学习路线,这样才能高效的学习,不必要做无效功,既浪费时间又得不到什么效率,大家不妨按照我这份路线来学习。

最后面试分享

大家不妨直接在牛客和力扣上多刷题,同时,我也拿了一些面试题跟大家分享,也是从一些大佬那里获得的,大家不妨多刷刷题,为金九银十冲一波!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  1. 多个节点监听了多个队列(让每个队列名都不同,目的就是让他们不存在竞争关系,没有竞争关系就不用做消息共享,只管由MQ分发即可,这时同一条消息就会发到多个节点上)

  2. 到MQ控制台,将所有节点生成的队列手动绑定到指定的Fanout交换机上(这一步是手动的,当然也可以通过API做到,下面会说到)

  3. 生产者发送消息指定的Fanout交换机,交换机将同一条消息被分发到多个节点上

  4. 广播效果达成!

这种方案,也比较容易。这样做,就是为了让多个节点间是广播关系。总的来说不麻烦,其中第五步手动操作其实有点挫,这种手动操作步骤其实是应该转成自动化,让应用程序来完成,方便以后自动化建设。

这种方案的spring配置也比较简单,参考Fanout模式的配置即可。本文重点在这个思路的实现过程。

只列举部分代码如下:

消息生产者

<rabbit:fanout-exchange name=“exchangeFour” durable=“true” auto-delete=“false” >

</rabbit:fanout-exchange>

<rabbit:template id=“amqpTemplate4” connection-factory=“connectionFactory2”

exchange=“exchangeFour” />

消息消费者

<rabbit:queue name=“${queue-name-fanout}” durable=“true”

auto-delete=“false” exclusive=“false” declared-by=“connectAdmin2” />

<rabbit:listener-container

connection-factory=“connectionFactory2”>

<rabbit:listener queues=“${queue-name-fanout}” ref=“fanoutOneConsumer” />

</rabbit:listener-container>

另外,RabbitMQ的客户端API支持让我们 将队列绑定到指定的交换机上。具体可参考我的工具类代码。

代码如下:

package com.lunch.foo.rabbitmq;

import com.rabbitmq.client.*;

import java.io.IOException;

import java.util.concurrent.TimeoutException;

/**

  • Created by xuyaokun On 2019/3/10 2:26

  • @desc:

*/

public class RabbitMQUtil {

private static final String HOST = “192.168.3.128”;

private static final int PORT = AMQP.PROTOCOL.PORT;

private static final String USERNAME = “kunghsu”;

private static final String PASSWORD = “123456”;

private static final String VIRTUALHOST = “/”;

public static void main(String[] args) {

String QUEUE_NAME = “queueOneX”;

String EXCHANGE_NAME = “exchangeFour”;

try {

queueBind(EXCHANGE_NAME, QUEUE_NAME);

} catch (IOException e) {

e.printStackTrace();

} catch (TimeoutException e) {

e.printStackTrace();

}

}

/**

  • 获取会话链接

  • @return

  • @throws IOException

  • @throws TimeoutException

*/

private static Connection getConnection() throws IOException, TimeoutException {

ConnectionFactory factory = new ConnectionFactory();

factory.setHost(HOST);

factory.setPort(PORT);

factory.setUsername(USERNAME);

factory.setPassword(PASSWORD);

factory.setVirtualHost(VIRTUALHOST);

return factory.newConnection();

}

/**

  • 绑定队列到指定交换机

  • @param exchangeName

  • @param queueName

  • @throws IOException

  • @throws TimeoutException

*/

public static void queueBind(String exchangeName, String queueName) throws IOException, TimeoutException {

Channel channel = null;

try{

channel = getConnection().createChannel();

总结

机会是留给有准备的人,大家在求职之前应该要明确自己的态度,熟悉求职流程,做好充分的准备,把一些可预见的事情做好。

对于应届毕业生来说,校招更适合你们,因为绝大部分都不会有工作经验,企业也不会有工作经验的需求。同时,你也不需要伪造高大上的实战经验,以此让自己的简历能够脱颖而出,反倒会让面试官有所怀疑。

你在大学时期应该明确自己的发展方向,如果你在大一就确定你以后想成为Java工程师,那就不要花太多的时间去学习其他的技术语言,高数之类的,不如好好想着如何夯实Java基础。下图涵盖了应届生乃至转行过来的小白要学习的Java内容:

请转发本文支持一下

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

的技术语言,高数之类的,不如好好想着如何夯实Java基础。下图涵盖了应届生乃至转行过来的小白要学习的Java内容:

请转发本文支持一下

[外链图片转存中…(img-7COX7W6e-1715448369709)]

[外链图片转存中…(img-6I5YCcDn-1715448369710)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值