RabbitMQ-技术调研

本文介绍了一个使用 Java 实现的 RabbitMQ 消费者示例,该示例启用了 RabbitMQ 的自动恢复功能,确保了在连接丢失的情况下能够自动重新建立连接,并继续消费消息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • CMD:

/opt/apps/rabbitmq/sbin/rabbitmq-server   –detached 

/opt/apps/rabbitmq/sbin/rabbitmqctl  stop  

  • web:

http://10.11.156.226:15672/

  • FAQ:
       1.  Rabbitmq Client Automatic Recovery

        ( java, rabbitmq-client-3.3.5.jar )

import java.io.IOException;
import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.DefaultConsumer;
import com.rabbitmq.client.Envelope;

public class JmsRecvMain {

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

ConnectionFactory factory = new ConnectionFactory();
factory.setHost(JmsUtils.AMMQ_HOST);
factory.setAutomaticRecoveryEnabled(true);
factory.setNetworkRecoveryInterval(10000);

Connection connection = factory.newConnection();
final Channel channel = connection.createChannel();
channel.queueDeclare(JmsUtils.QUEUE_NAME, false, false, false, null);
System.out.println(" [*] Waiting for messages. To exit press CTRL+C");

boolean autoAck = false;
channel.basicConsume(JmsUtils.QUEUE_NAME, autoAck, "myConsumerTag",

new DefaultConsumer(channel) {

@Override
public void handleDelivery(String consumerTag,

Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {

// delivery:Body
String message = new String(body);
System.out.println(" [x] Received '" + message + "'");

// delivery:Envelope
System.out.println(" [x] Received Envelope_DeliveryTag'" + envelope.getDeliveryTag() + "'");
System.out.println(" [x] Received Envelope_Exchange'" + envelope.getExchange() + "'");
System.out.println(" [x] Received Envelope_RoutingKey'"+ envelope.getRoutingKey() + "'");
System.out.println(" [x] Received Envelope_Redeliver'"+ envelope.isRedeliver() + "'");
channel.basicAck(envelope.getDeliveryTag(), false);

}});}

public static void main(String[] args) {

try {

new JmsRecvMain().receive(null);
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}}}

### Java后端技术栈的组成和相关技术 Java后端技术栈是一个综合性的体系,涵盖了从基础语言到框架、中间件以及数据库等多个层面的技术。以下是Java后端技术栈的主要组成部分及相关技术的最佳实践: #### 1. **Java语言基础** Java语言是整个后端技术栈的核心。需要掌握的内容包括但不限于以下方面: - 数据结构与算法:数组、链表、树、栈、队列等基本数据结构[^1]。 - 面向对象编程(OOP):类、对象、继承、多态、封装等概念[^2]。 - 异常处理机制:掌握Java中的异常分类及处理方式[^2]。 #### 2. **JDK核心类库** 熟悉JDK提供的核心类库对于开发高效的应用程序至关重要: - 集合框架:`ArrayList`、`LinkedList`、`HashMap`、`ConcurrentHashMap`等集合类[^1]。 - 并发编程:线程池(`ThreadPoolExecutor`)、锁机制(`synchronized`、`ReentrantLock`)、原子变量、`ThreadLocal`等[^1]。 - I/O与NIO:传统I/O与非阻塞I/O(NIO),零拷贝技术,多路复用(`select`、`poll`、`epoll`)[^1]。 #### 3. **JVM(Java虚拟机)** 深入理解JVM的工作原理对于性能调优和问题排查非常重要: - 运行时数据区:堆、栈、方法区等内存模型[^1]。 - 类加载机制:双亲委派模型及其工作原理[^1]。 - 垃圾回收(GC):CMS、G1、ZGC等垃圾回收器的工作机制及优化。 - JVM调优:通过分析CPU使用率、频繁FGC等问题进行调优[^1]。 #### 4. **数据库与SQL优化** 数据库是后端系统的重要组成部分,需要掌握以下内容: - SQL优化:索引设计、查询优化、慢SQL分析。 - 锁机制:行锁、表锁、MVCC(多版本并发控制)[^1]。 - 分库分表:分布式数据库的设计与实现[^1]。 #### 5. **设计模式** 设计模式是解决常见问题的标准方案,常见的设计模式包括: - 单例模式:确保一个类只有一个实例[^1]。 - 工厂模式:创建对象的接口。 - 责任链模式:将请求沿着处理链传递[^1]。 #### 6. **中间件与框架** 中间件和框架简化了后端开发流程,常用的有: - Spring生态:`Spring Boot`、`Spring MVC`、`Spring Cloud`等[^2]。 - 消息队列:`RabbitMQ`、`Kafka`、`ActiveMQ`等[^2]。 - 缓存:`Redis`、`Memcached`等缓存技术[^2]。 - 分布式协调:`ZooKeeper`用于分布式系统的协调管理[^3]。 #### 7. **网络与通信协议** 网络通信是后端开发的基础,需要了解以下内容: - TCP/IP协议栈:TCP三次握手、四次挥手[^1]。 - HTTP/HTTPS协议:状态码、请求响应格式、安全性。 - NIO与Netty:非阻塞I/O框架的使用[^1]。 #### 8. **最佳实践** - 技术调研:选择成熟、社区支持良好的技术栈[^3]。 - 性能优化:通过JVM调优、数据库索引优化等方式提升系统性能。 - 安全性:关注数据加密、身份认证、权限管理等方面。 - 可扩展性:设计可水平扩展的架构,支持高并发场景[^3]。 ```java // 示例代码:Spring Boot中配置Redis缓存 @Configuration public class RedisConfig { @Bean public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) { RedisTemplate<String, Object> template = new RedisTemplate<>(); template.setConnectionFactory(connectionFactory); return template; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值