当前位置: 首页 > wzjs >正文

国家新闻出版署官网宝鸡seo

国家新闻出版署官网,宝鸡seo,网站优秀设计,python网站开发的优势1. 下载和安装 RabbitMQ RabbitMQ 依赖 Erlang 运行时,所以得先装 Erlang,再装 RabbitMQ。下面以 Ubuntu 为例,Windows 和 macOS 也顺便提一下。 1.1 安装 Erlang RabbitMQ 需要 Erlang 支持,先装它。 Windows: 去 Erl…

1. 下载和安装 RabbitMQ

RabbitMQ 依赖 Erlang 运行时,所以得先装 Erlang,再装 RabbitMQ。下面以 Ubuntu 为例,Windows 和 macOS 也顺便提一下。

  • 1.1 安装 Erlang

RabbitMQ 需要 Erlang 支持,先装它。

Windows:

  • 去 Erlang 官网 下载最新版(比如 OTP 26.x 的 .exe)。
  • 双击安装,记得用管理员权限,全程点“下一步”就行。

macOS:

  • 用 Homebrew: bashbrew install erlang

  • 1.2 安装 RabbitMQ

装好 Erlang 后,装 RabbitMQ。

Windows:

  • 去 RabbitMQ 官网 下载最新版(比如 rabbitmq-server-3.13.x.exe)。
  • 双击安装,选默认设置,装完自动跑成 Windows 服务。

macOS:

  • 用 Homebrew: bashbrew install rabbitmq

2. 本地启动 RabbitMQ

装好后,启动 RabbitMQ 服务,确认能用。

Windows:

  • 安装后自动启动,检查服务:
    • 打开“服务”面板(Win + R,输入 services.msc)。
    • 找 RabbitMQ,状态要是“正在运行”。
  • 或者用命令行: cmd rabbitmqctl status

macOS:

  1. 启动: bashbrew services start rabbitmq
  2. 检查: bashrabbitmqctl status

2.1 启用管理界面(可选)

RabbitMQ 有个网页管理界面,方便看队列状态。

  • 启用插件: sudo rabbitmq-plugins enable rabbitmq_management
  • 浏览器访问:http://localhost:15672,默认账号密码是 guest/guest。
  • 为了案例跑通,我们用代码里的账号 admin/admin,先加用户:
  • sudo rabbitmqctl add_user admin admin sudo rabbitmqctl set_user_tags admin administrator sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"

3. 项目依赖导入

我们用 Java 和 Maven 写代码,需导入 RabbitMQ 客户端依赖。

在 pom.xml 加:

<dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>5.21.0</version>
</dependency>
<dependency><groupId>org.testng</groupId><artifactId>testng</artifactId><version>7.10.2</version><scope>test</scope>
</dependency>

  • amqp-client:RabbitMQ 的 Java 客户端,处理消息发送和接收。
  • testng:测试框架,跑我们的 @Test 方法。

4. 案例代码:发送和消费消息

下面是完整的案例代码,模拟发送 10 条消息到队列,再消费它们。代码简单,带中文注释,跑通就能看到效果。

javapackage org.example.suanfa.project.codeVerse.judege0.mq;import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.TimeoutException;
import java.util.concurrent.atomic.AtomicInteger;import org.testng.annotations.Test;import com.rabbitmq.client.AMQP;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Consumer;
import com.rabbitmq.client.DefaultConsumer;
import com.rabbitmq.client.Envelope;public class RabbitMqTest {// 消息队列名称private final static String QUEUE_NAME = "hello";@Testpublic void sendMessages() throws IOException, TimeoutException {ConnectionFactory factory = new ConnectionFactory();factory.setHost("localhost");factory.setUsername("admin");factory.setPassword("admin");try (Connection connection = factory.newConnection();Channel channel = connection.createChannel()) {// 声明一个持久化的队列channel.queueDeclare(QUEUE_NAME, true, false, false, null);for (int i = 0; i < 10; i++) {String message = "消息-" + i + " 时间戳: " + System.currentTimeMillis();// 设置消息为持久化存储AMQP.BasicProperties props = new AMQP.BasicProperties.Builder().deliveryMode(2)  // 2表示持久化.build();channel.basicPublish("", QUEUE_NAME, props, message.getBytes());System.out.println(" [x] 已发送: " + message);Thread.sleep(500); // 每条消息间隔500毫秒}} catch (InterruptedException e) {Thread.currentThread().interrupt();}}@Testpublic void consumeMessages() throws IOException, TimeoutException {ConnectionFactory factory = new ConnectionFactory();factory.setHost("localhost");factory.setUsername("admin");factory.setPassword("admin");Connection connection = factory.newConnection();Channel channel = connection.createChannel();// 确认队列存在channel.queueDeclare(QUEUE_NAME, true, false, false, null);System.out.println(" [*] 等待消息中...");// 用计数器记录消费的消息数AtomicInteger messageCount = new AtomicInteger(0);Consumer consumer = new DefaultConsumer(channel) {@Overridepublic void handleDelivery(String consumerTag, Envelope envelope,AMQP.BasicProperties properties, byte[] body) throws IOException {String message = new String(body, StandardCharsets.UTF_8);System.out.printf(" [x] 收到消息: %s (投递标签: %d)%n", message, envelope.getDeliveryTag());// 模拟处理消息的业务逻辑try {processMessage(message);} finally {// 手动确认消息已处理channel.basicAck(envelope.getDeliveryTag(), false);if (messageCount.incrementAndGet() >= 10) {synchronized (messageCount) {messageCount.notify(); // 通知主线程消费完成}}}}};// 禁用自动确认,改用手动确认channel.basicConsume(QUEUE_NAME, false, consumer);// 等收到10条消息才结束synchronized (messageCount) {while (messageCount.get() < 10) {try {messageCount.wait();} catch (InterruptedException e) {Thread.currentThread().interrupt();}}}channel.close();connection.close();}private void processMessage(String message) {// 模拟处理消息的逻辑System.out.println(" [√] 正在处理: " + message);}
}

代码说明

  • 发送消息:
    • sendMessages 方法连到本地 RabbitMQ(localhost,用户 admin)。
    • 声明一个持久化队列 hello(durable=true)。
    • 循环发 10 条消息,每条带时间戳,消息也设成持久化(deliveryMode=2)。
    • 每次发完等 500 毫秒,模拟真实场景。
  • 消费消息:
    • consumeMessages 方法连到同一个队列。
    • 用 DefaultConsumer 监听消息,收到后打印并处理(processMessage 模拟业务)。
    • 手动确认消息(basicAck),确保不丢消息。
    • 用 AtomicInteger 计数,收到 10 条后通知主线程结束。 an

http://www.dtcms.com/wzjs/282667.html

相关文章:

  • 深圳网站建设ppchsj太原seo建站
  • 网站如何测试有无未做链接的文件热搜排行榜今日排名
  • 制作一个企业网站过程培训心得体会200字
  • 站长平台社区网络营销的四个步骤
  • 一般做网站的在哪里找郑州本地seo顾问
  • 个人网站怎么做才能值钱seo企业建站系统
  • 兴科cms网站建设系统怎么做
  • 一个网站做3个关键词够网络营销推广的特点
  • 域名网站大全网页制作的软件有哪些
  • 香港服务器的网站可以做经营么阿里巴巴指数查询
  • 稀奇古怪好玩有用的网站搜狗搜索引擎网页
  • 哈尔滨做网站网站推广怎么做
  • it外包人员有多惨新的seo网站优化排名 网站
  • 网站项目合同拼多多怎么查商品排名
  • 营销型网站建设推广网站的方法
  • 注塑模具东莞网站建设央视网新闻
  • 网站开发工具与环境广告软文范例
  • 做试用网站的原理美国最新新闻头条
  • 我的qq中心网页版图片seo优化是什么意思
  • 兼职做ps网站360广告投放平台
  • 教人做窗帘的视频网站网站搭建一般要多少钱
  • 酒泉网站建设培训发布外链的步骤
  • 建设治安总队网站目的网站检测
  • 呼和浩特市做网站的企业制作公司网站大概多少钱
  • 做视频网站公司要怎么做四川网站推广公司
  • 深圳做小程序网站开发2022年可以打开的网址
  • 做品牌特价的网站福州seo推广
  • 自己做网站上传相册百度知道一下首页
  • wordpress不同页面不同主题宁波做seo推广企业
  • django做网站效率高吗网络营销总监岗位职责