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

zblog做企业网站好吗市场调研报告范文3000字

zblog做企业网站好吗,市场调研报告范文3000字,龙华营销型网站,安装wordpress时选择中文语言失败SpringAMQT RabbitMQ安装与部署RabbitMQ结构简单队列模型 SpringAMQP依赖引入配置RabbitMQ连接信息基本模型简单队列模型WorkQueue模型 发布订阅模型FanoutExchangeDirectExchangeTopicExchange 消息转换器 消息队列是实现异步通讯的一种方式,我们将从RabbitMQ为例开…

SpringAMQT

  • RabbitMQ
    • 安装与部署
    • RabbitMQ结构
    • 简单队列模型
  • SpringAMQP
    • 依赖引入
    • 配置RabbitMQ连接信息
    • 基本模型
      • 简单队列模型
      • WorkQueue模型
    • 发布订阅模型
      • FanoutExchange
      • DirectExchange
      • TopicExchange
    • 消息转换器

消息队列是实现异步通讯的一种方式,我们将从RabbitMQ为例开始介绍SpringAMQT。

RabbitMQ

RabbitMQ是基于Erlang语言开发的开源消息通信中间件。

安装与部署

由于RabbitMQ运行需要安装Erlang,为了方便部署,我们采用docker的方式来部署RabbitMq

首先拉取RabbitMQ的镜像,带有management的Tag的说明该镜像含有Web控制台

docker pull rabbitmq:3-management

执行下面的命令来运行RabbitMQ容器

docker run \
-e RABBITMQ_DEFAULT_USER=username \
-e RABBITMQ_DEFAULT_PASS=password \
--name mq \
-p 15672:15672 \
-p 5672:5672 \
-d \
rabbitmq:3-management

username和password是进入RabbitMQ控制台时使用的账号密码,15672端口是控制台所占用的端口,5672是MQ服务所占用的端口。

RabbitMQ结构

  • channel: 操作MQ的工具
  • exchange: 路由消息到队列中
  • queue: 缓存消息
  • virtual host:虚拟主机,是对queue、exchange等资源的逻辑分组
    在这里插入图片描述

简单队列模型

消息发布者

@SpringBootTest
class PublisherApplicationTests {@Testvoid publisher() throws IOException, TimeoutException {//建立连接ConnectionFactory factory = new ConnectionFactory();factory.setHost("192.168.111.135");factory.setPort(5672);factory.setUsername("username");factory.setPassword("password");factory.setVirtualHost("/");Connection connection=factory.newConnection();//创建通道Channel channel=connection.createChannel();//创建队列String queueName="simple.queue";channel.queueDeclare(queueName,false,false,false,null);//发布消息String message="hello,rabbitmq!";for (int i = 0; i < 100; i++) {channel.basicPublish("",queueName,null,message.getBytes());}channel.close();connection.close();}

消息消费者

public class Consumer {public static void main(String[] args) throws IOException, TimeoutException {//建立连接ConnectionFactory factory = new ConnectionFactory();factory.setHost("192.168.111.135");factory.setPort(5672);factory.setUsername("username");factory.setPassword("password");factory.setVirtualHost("/");Connection connection=factory.newConnection();//建立通道Channel channel=connection.createChannel();//消费端也创建队列是为了防止消费端先启动找不到队列String queueName="simple.queue";channel.queueDeclare(queueName,false,false,false,null);//为通道绑定消费者channel.basicConsume(queueName,true,new DefaultConsumer(channel){@Overridepublic void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {System.out.println("消息已被处理");}});}
}

其他的模型将在SpringAMPQ中进行介绍

SpringAMQP

AMQP (Adavance Message Queuing Protocol 高级消息队列协议)是用于在应用程序或之间传递业务消息的开放标准。该协议与语言和平台无关,更符合微服务中独立性的要求。

Spring AMQP 是基于AMQP协议定义的一套API规范,提供了模板来发送和接收消息。包含两个部分,其中spring-amqp是基础抽象,spring-rabbit是底层的默认实现

SpringAMQP的特点:

  • 提供监听容器用于异步处理入站消息
  • 提供RabbitTemplate用于发送和接收消息
  • 提供RabbitAdmin来自动声明队列,交换机和绑定

依赖引入

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

配置RabbitMQ连接信息

spring:rabbitmq:host: 192.168.111.135port: 5672username: usernamepassword: passwordvirtual-host: /

基本模型

简单队列模型

消息发布端

@SpringBootTest
class PublisherApplicationTests {@AutowiredRabbitTemplate rabbitTemplate;@Testvoid publisher(){String queueName="simple.queue";String message="hello,rabbitmq!";rabbitTemplate.convertSendAndReceive(queueName,message);}}

消息消费端

@Component
public class RabbitListenerTest {@RabbitListener(queues = "simple.queue")public void listenSimpleQueueMessage(String message){System.out.println(message);}
}

WorkQueue模型

模型特点:多个消费者绑定到一个队列,同一条消息只会被一个消费者处理。

在默认情况下,消费者会进行消息预取,预取的数量为无限大,这会导致性能不同的消费者处理相同数量的消息,可以通过设置prefetch来控制消费者预取的消息数量

spring:rabbitmq:listener:simple:prefetch: 1

发布订阅模型

发布订阅模式允许将同一消息发送给多个消费者。实现方式是加入了exchange(交换机)

常见的exchange类型有:

  • Fanout: 广播
  • Direct: 路由
  • Topic: 话题

exchange只负责消息路由而不进行存储,路由失败则消息丢失

发布订阅模型分三部

  1. 在consumer服务中声明Exchange、Queue、Binding
  2. 在consumer服务中声明多个消费者
  3. 在publisher服务发送消息到Exchange

FanoutExchange

声明Exchange、Queue、Binding。除了通过在配置类中通过@Bean注解绑定队列和交换机外还可以在@RabbitListener注解中绑定,第二种绑定方式将在下一部分使用

@Configuration
public class FanoutConfig {@Beanpublic FanoutExchange fanoutExchange(){return new FanoutExchange("simple.fanout");}@Beanpublic Queue fanoutQueue1(){return new Queue("fanout.queue1");}@Beanpublic Queue fanoutQueue2(){return new Queue("fanout.queue2");}@Beanpublic Binding bingingQueue1(Queue fanoutQueue1,FanoutExchange exchange){return BindingBuilder.bind(fanoutQueue1).to(exchange);}@Beanpublic Binding bingingQueue2(Queue fanoutQueue2,FanoutExchange exchange){return BindingBuilder.bind(fanoutQueue2).to(exchange);}
}

声明消费者与简单模型没什么差别,就不赘述了。

publisher端将消息发送给交换机有一点小区别

@SpringBootTest
class PublisherApplicationTests {@AutowiredRabbitTemplate rabbitTemplate;@Testvoid publisher(){String exchangeName="simple.fanout";String message="hello,rabbitmq!";//三个参数分别为交换机名、routingkey和消息rabbitTemplate.convertSendAndReceive(exchangeName,"",message);}}

DirectExchange

在上一种交换机中发送消息的第二个参数routingkey我们设置为了空,实际上,每一个Queue与Exchange间都可以设定多个bindingkey,通过routingkey参数,交换机将把消息路由到与其匹配的队列中。

@Component
public class RabbitListenerTest {@RabbitListener(bindings = @QueueBinding(value = @Queue(name = "simple.queue1"),exchange = @Exchange(name = "simple.direct",type = ExchangeTypes.DIRECT),key = {"red","blue"}))public void listenSimpleQueueMessage(String message){System.out.println(message);}
}

TopicExchange

TopicExchange与DirectExchange类似,区别是:

  • TopicExchange的routingkey必须是多个单词的列表,并且以英文句号.分隔。
  • bindingkey支持使用通配符,#匹配零或多个单词,*匹配一个单词。

通过以下代码,你很容易可以发现它的特点

@SpringBootTest
class PublisherApplicationTests {@AutowiredRabbitTemplate rabbitTemplate;@Testvoid publisher(){String exchangeName="simple.fanout";String message="hello,rabbitmq!";rabbitTemplate.convertSendAndReceive(exchangeName,"china.weather",message);}}
@Component
public class RabbitListenerTest {@RabbitListener(bindings = @QueueBinding(value = @Queue(name = "simple.queue1"),exchange = @Exchange(name = "simple.direct",type = ExchangeTypes.Topic),key = "china.*"))public void listenSimpleQueueMessage(String message){System.out.println(message);}
}

消息转换器

我们在使用RabbitTemplate的时候可以发现,它所发送的消息的类型为Object,这意味着它可以发送所有对象。默认它所使用的是jdk的序列化,这样的效率较低。

Spring的对消息对象的处理是由org.springframework.amqp.support.converter.MessageConverter来处理的,只需定义一个MessageConverter类型的Bean即可修改序列化方式。

以jackson的序列化为例

引入jackson的依赖

<dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-xml</artifactId><version>2.9.10</version>
</dependency>

定义MessageConverter类型的Bean

@Bean
public MessageConverter jsonMessageConverter(){return new Jackson2JsonMessageConverter();
}
http://www.tj-hxxt.cn/news/676.html

相关文章:

  • 做网站的是外包公司吗企业网站建设规划
  • 湖南做网站kaodezhu做一个个人网站
  • 汕头市小程序定制公司沈阳关键字优化公司
  • 网站被黑咋样的河南优化网站
  • jsp语言做网站自媒体培训
  • 外贸专业网站的公司网推项目平台
  • 网站建设方为客户提供使用说明书软文广告示范
  • 佛山网站建设公司怎么样品牌营销策略包括哪些内容
  • 网站建设网站开发武汉网站快速排名提升
  • 莱芜在线论坛话题牛泉镇网站优化seo是什么意思
  • 2017政府网站建设标准百度seo排名优化助手
  • 网站seo哪家公司好全国人大常委会委员长
  • 网站站群7月新闻大事件30条
  • 网站克隆 有后台登录bt蚂蚁磁力
  • 网站前瞻性_新流量机会内容建设分析bt磁力搜索
  • 网站优化文档专业网站建设
  • 网站怎么做能快速有排名365优化大师软件下载
  • 北京网站建设站建设百度搜索排行
  • 辽宁省住房建设厅网站网站seo检测
  • 凡客诚品官方网站查询小红书搜索关键词排名
  • 知名门户网站淘宝关键词指数
  • 郴州市住房和城乡建设厅网站请输入搜索关键词
  • 网站建设误区微信搜索seo优化
  • 上饶专业做网站建设网页开发用什么软件
  • 哪个公司建网站关键词查询神器
  • 怎么用手机做抖音上最火的表白网站百度竞价排名规则及费用
  • 文山建设5G网站seo课程哪个好
  • 厦门哪家公司做网站新闻头条今天最新消息
  • 有关做美食的网站有哪些软文写作技巧及范文
  • 携程网站建设进度及实施过程查权重工具