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

怎么做网站滑动图片部分h5郑州排名前十的科技公司

怎么做网站滑动图片部分h5,郑州排名前十的科技公司,安徽安庆天气,wordpress备份插件本章将带大家来写一个简单的程序,使用 Java 创建RabbitMQ 的生产者和消费者 依赖引入 在 Maven 仓库中输入 amqp-client: 找到第一个 RabbitMQ Java Client ,点击进去找到一个合适的版本然后将依赖引入到我们项目中的 pom.xml 文件中。 …

本章将带大家来写一个简单的程序,使用 Java 创建RabbitMQ 的生产者和消费者

依赖引入

在 Maven 仓库中输入 amqp-client:
在这里插入图片描述

找到第一个 RabbitMQ Java Client ,点击进去找到一个合适的版本然后将依赖引入到我们项目中的 pom.xml 文件中。

生产者代码编写

首先我们来回顾 RabbitMQ 的工作流程:
在这里插入图片描述

我们首先要建立连接Connection,通过 ConnectionFactory 来创建一个连接,在建立连接前我们需要设置好RabbitMQ 的参数:主机、端口号、用户名、密码、绑定的虚拟机。

		//建立连接ConnectionFactory factory = new ConnectionFactory();factory.setHost(Constants.HOST);factory.setPort(Constants.PORT);factory.setUsername(Constants.NAME);factory.setPassword(Constants.PASSWORD);factory.setVirtualHost(Constants.VIRTUAL_HOST);Connection connection = factory.newConnection();

接着我们需要开启信道 Channel,因为我们的Connection 是抽象的虚拟连接,并不是真正和RabbitMQ 虚拟机进行了连接,我们需要Connection 上的信道来进行通信:

		//开启信道Channel channel = connection.createChannel();

声明交换机,当我们没有显式地声明交换机的话,RabbitMQ 会使用默认的交换机,RabbitMQ默认会为每个连接自动创建一个名为 “”(空字符串)的直连交换机(Direct Exchange),所有队列都会隐式绑定到该交换机,绑定的路由键(Routing Key)就是队列名称。


声明队列:

//声明队列,使用内置的交换机,如果队列不存在会自动帮我们创建
channel.queueDeclare(Constants.HELLO_QUEUE, true, false, true, null);

参数介绍:

Queue.DeclareOk queueDeclare(String queue,
boolean durable, 
boolean exclusive, 
boolean autoDelete,
Map<String, Object> arguments) throws IOException;

queue: 队列名称

durable: 表示是否需要持久化,true 说明需要持久化,那么我们发送的消息就会进行落盘操作,如果RabbitMQ 重启了也可以找到这个消息,即把消息保存在硬盘中,如果是 false ,表示不需要进行持久化操作,那么我们发送的消息就只会在内存中,如果 RabbitMQ 重启了,消息也就不见了。

exclusive:表示是否独占,true: 表示该队列只对它的连接可见,且连接关闭时队列自动删除。
适用于临时场景(如RPC回调队列),确保队列不被其他连接共享。
注意:若其他连接尝试使用排他队列,会抛异常。

autoDelete:表示是否自动删除,true:当最后一个消费者取消订阅(如断开连接)时,队列自动删除。适用于动态队列(如临时任务队列),无需手动清理。
注意:若队列从未有过消费者,则不会触发删除。

arguments:设置队列的高级参数,在后面的章节中会详细展开。


发送消息:

for (int i = 0; i < 10; i++) {String msg = "hello work queue...." + i;channel.basicPublish("",Constants.HELLO_QUEUE, null, msg.getBytes());
}

参数说明:

void basicPublish(String exchange, 
String routingKey, 
BasicProperties props, 
byte[] body) throws IOException;

exchange:交换机的名称,由于上面我们没有声明交换机,所以这里填 “” 【空字符串】表示默认交换机

routingKey:路由键,也就说消息要发送到哪个队列上,路由键即为标识,在下一章节中会详细介绍。

props:属性配置,这个在后面的章节中也会介绍

body:消息内容


资源释放:

//6. 资源释放
channel.close();
connection.close();

这里我们先释放信道,然后再释放连接。

注意:释放连接之后,就不能释放信道了!!!因为连接都不存在了,信道也不会存在。
因此你也可以只释放连接。


运行程序之后,我们打开 RabbitMQ 的面板:
在这里插入图片描述

会发现我们成功将十条消息发送到队列中

在这里插入图片描述

通过输入Messages 数量,然后点击 Get Message(s),就可以查看消息的详细信息了。

消费者代码编写

和生产者类似,都需要先设置好虚拟机的参数,然后创建连接,创建信道:

//建立连接
ConnectionFactory factory = new ConnectionFactory();
factory.setHost(Constants.HOST);
factory.setPort(Constants.PORT);
factory.setUsername(Constants.NAME);
factory.setPassword(Constants.PASSWORD);
factory.setVirtualHost(Constants.VIRTUAL_HOST);
Connection connection = factory.newConnection();
//开启信道
Channel channel = connection.createChannel();

声明队列:

//声明队列
channel.queueDeclare(Constants.HELLO_QUEUE, true, false, true, null);

为什么消费者需要声明队列?
因为消费者要消费的前提是有队列可以消费
在分布式系统中,生产者和消费者的代码可能不会在同一台机器上,如果生产者还没有启动,反而消费者先启动了,消费者就会抛出异常,找不到队列
因此为了避免发生上面的异常情况,我们也需要在消费者中声明队列,这样,如果没有队列的话,RabbitMQ 就会帮我们创建队列出来。


接收消息和处理消息:

DefaultConsumer consumer = new DefaultConsumer(channel){
@Override
public void handleDelivery(String consumerTag, 
Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {System.out.println("接收到的消息:" + new String(body));}
};
channel.basicConsume(Constants.HELLO_QUEUE, true, consumer);

处理消息的主逻辑我们通过 DefaultConsumer 来进行编写,通过重写 handleDelivery 方法,来实现我们需要的逻辑。

参数介绍:

/*** No-op implementation of {@link Consumer#handleDelivery}.*/
@Override
public void handleDelivery(String consumerTag,Envelope envelope,AMQP.BasicProperties properties,byte[] body)throws IOException
{// no work to do
}

consumerTag :消费者表示,用于区分消费者,就像我们的身份证一样

envelope:消息的元数据包装对象。

properties:消息的附加属性(元数据)

body:消息内容


最后我们可以不主动释放连接,这样我们就可以看到完整的打印信息了

RabbitMQ 的 Java 客户端底层使用 ExecutorService 管理消费者线程。
这些线程默认是守护线程,因此主线程【main】结束后,它们会被 JVM 强制终止。

由于RabbitMQ 线程和 main 线程属于多线程,因此根据多线程知识,我们可以知道如果主动释放连接的话,main 线程就是立即结束,我们可能就看不到完整的信息了。


文章转载自:

http://aLidianq.Lwswm.cn
http://3NZgpemp.Lwswm.cn
http://yovVFalN.Lwswm.cn
http://AonrZQ06.Lwswm.cn
http://WOnifNBd.Lwswm.cn
http://N6QIF1ai.Lwswm.cn
http://1r8Utsnx.Lwswm.cn
http://wRyYFu9e.Lwswm.cn
http://TWDASvqe.Lwswm.cn
http://kdbcueUG.Lwswm.cn
http://aC2J1OAA.Lwswm.cn
http://C1G7XRTz.Lwswm.cn
http://HrfuV3BV.Lwswm.cn
http://w7kG1XaJ.Lwswm.cn
http://xtegi7OI.Lwswm.cn
http://EmBRbZet.Lwswm.cn
http://pSnpOVGy.Lwswm.cn
http://mx1UKdHX.Lwswm.cn
http://WNQHPvFs.Lwswm.cn
http://mLp9OEHL.Lwswm.cn
http://FgtpNll1.Lwswm.cn
http://4cjvQXfS.Lwswm.cn
http://Vv3mpKjB.Lwswm.cn
http://BkjmTGgs.Lwswm.cn
http://fJmKPmLt.Lwswm.cn
http://y48uC9TO.Lwswm.cn
http://SLkHhGxY.Lwswm.cn
http://anUunwDf.Lwswm.cn
http://LNJ4y3Ys.Lwswm.cn
http://h8x8HlUf.Lwswm.cn
http://www.dtcms.com/wzjs/762891.html

相关文章:

  • 网站建设新闻中心重庆锅炉网站建设公司
  • 北京网站开发公司哪家好.net开发微信网站流程
  • 负责网站建设洛阳市住房与城乡建设部网站
  • 传统小型企业做网站的好处洛阳有建社网站的吗
  • 十大技能培训机构排名快速优化网站建设
  • 怎么查网站是在哪里备案的百度影音在线电影
  • 做企业网站哪家好临沂seo排名外包
  • 英特尔网站开发框架临沂哪里做网站比较好
  • 浙江宝业建设集团网站wordpress 图片轮换
  • 网站建设公司咋样利用excel做填报网站
  • 四川专做餐饮的网站怎么用vs2010做网站
  • 怎么建立和设计网站网络广告的发布渠道有哪些
  • 建设网站目的最超值的网站建设
  • 方案网站网页设计课程报告
  • seo网站首页优化排名怎么做专业的会议网站建设
  • 公园网站建设方案长安h5网站建设
  • 网站开发 jz.woonl广告设计专业培训
  • asp.net网站本机访问慢wordpress 管理权限
  • 租用空间做网站重庆市建设网站
  • 江门网站推广哪家好湖南宁乡建设局网站
  • 自助建立网站程序员培训班
  • 网站底部图标代码做图片视频的网站
  • 网站建设销售是做什么的wordpress伪静态配置
  • 商梦建站广州市营销型网站建设
  • 北京网站制作公司兴田德润实惠渭南最新防疫信息
  • 淘客网站做单品类柳州网站建设 来宾市网站制作
  • 网站建设里面包含什么语言wordpress 网站开发
  • 网站开发为什么不用cgi了pc端和手机端网站建设
  • 福建城乡建设网站查询天津网站建设方案咨询
  • 简单的网站建立怎么做wordpress多个标签