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

linux增加网站网店关键词怎么优化

linux增加网站,网店关键词怎么优化,云南省植保植检站网址,手工制作大全简单漂亮目录 一、SpringAMQP的介绍: 二、利用SpringAMQP实现HelloWorld中的基础消息队列功能 1、因为publisher和consumer服务都需要amqp依赖,因此这里把依赖直接放到父工程mq-demo中 2、编写yml文件 3、编写测试类,并进行测试 三、在consumer…

目录

一、SpringAMQP的介绍:

二、利用SpringAMQP实现HelloWorld中的基础消息队列功能

1、因为publisher和consumer服务都需要amqp依赖,因此这里把依赖直接放到父工程mq-demo中

2、编写yml文件

3、编写测试类,并进行测试

三、在consumer中编写消费逻辑,监听simple.queue

1、导入依赖,刚才在父工程中已经导入了,所以省略

2、编写yml文件

3、新建类,实现消费逻辑

4、运行并测试

四、模拟WorkQueue,实现一个队列绑定多个消费者

1、编写生产者(生产50个消息)

2、编写消费者(一个消费者更快,一个消费者更慢)

3、测试

4、消费预取的修改

5、重新测试

五、发布和订阅

(一)利用SpringAMQP演示FanoutExchange的使用

1、新建config类,声明交换机和队列

2、启动项目,查看配置

3、编写消费者代码

4、编写生产者代码

5、运行代码,观察输出

(二)交换机的作用

(三)声明队列、交换机、绑定关系的Bean是什么?

(四)DirectExchange

1、编写消费者代码

2、编写生产者代码

(五)Direct交换机与Fanout交换机的差异

(六)TopicExchange

1、编写消费者代码

2、编写生产者代码

3、运行测试

4、描述下Direct交换机与Topic交换机的差异

(七)测试发送Object类型信息

1、新增队列

2、发送对象

3、查看

4、优化(使用jackson进行序列化)

5、接收消息


一、SpringAMQP的介绍:

  1. AMQP是一种高级消息队列协议。

  2. SpringAMQP是基于Spring Framework的AMQP扩展,提供了一个抽象层,使得使用AMQP进行消息传递变得更加简单。

  3. SpringAMQP支持多种消息传递模式,包括点对点、发布/订阅和请求/响应等。

  4. SpringAMQP提供了许多高级功能,例如队列管理、消息确认、事务和消息过滤等。

  5. SpringAMQP提供了集成测试工具和基于Spring Boot的自动配置,使得集成AMQP变得更加容易。

  6. 总之,SpringAMQP是一个灵活、可扩展的AMQP实现,它使得使用消息队列时变得更加容易和高效。

二、利用SpringAMQP实现HelloWorld中的基础消息队列功能

1、因为publisher和consumer服务都需要amqp依赖,因此这里把依赖直接放到父工程mq-demo中

<!--        AMQP依赖,包含RabbitMQ--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency>

2、编写yml文件

logging:pattern:dateformat: MM-dd HH:mm:ss:SSS
spring:rabbitmq:host: 192.168.248.152port: 5672virtual-host: /username: itcastpassword: 123456

3、编写测试类,并进行测试

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringAmqpTest {@Autowiredprivate RabbitTemplate rabbitTemplate;@Testpublic void testSendMassage(){String queue = "simple.queue";String massage="aaaaaaa";rabbitTemplate.convertAndSend(queue,massage);}
}

三、在consumer中编写消费逻辑,监听simple.queue

1、导入依赖,刚才在父工程中已经导入了,所以省略

2、编写yml文件

logging:pattern:dateformat: MM-dd HH:mm:ss:SSS
spring:rabbitmq:host: 192.168.248.152port: 5672virtual-host: /username: itcastpassword: 123456

3、新建类,实现消费逻辑

package cn.itcast.mq.listener;import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;@Component
public class SpringRabbitListener {@RabbitListener(queues = "simple.queue")public void listenSimpleQueue(String msg){System.out.println("消费者接收到消息:"+msg);}
}

4、运行并测试

注意:

消息一旦消费就会从队列删除,RabbitMQ没有消息回溯功能

四、模拟WorkQueue,实现一个队列绑定多个消费者

1、编写生产者(生产50个消息)

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringAmqpTest {@Autowiredprivate RabbitTemplate rabbitTemplate;@Testpublic void testSendMassage(){String queue = "simple.queue";String massage="HelloWorld";for (int i = 0; i < 50; i++) {rabbitTemplate.convertAndSend(queue,massage);}}
}

2、编写消费者(一个消费者更快,一个消费者更慢)

@Component
public class SpringRabbitListener {@RabbitListener(queues = "simple.queue")public void listenSimpleQueue(String msg){System.out.println("消费者0接收到消息:"+msg+ LocalTime.now());try {Thread.sleep(20);} catch (InterruptedException e) {throw new RuntimeException(e);}}@RabbitListener(queues = "simple.queue")public void listenSimpleQueue1(String msg){System.err.println("消费者1接收到消息__________-:"+msg+ LocalTime.now());try {Thread.sleep(200);} catch (InterruptedException e) {throw new RuntimeException(e);}}
}

3、测试

我们发现,虽然消费者0更快,但是它并没有承担更多的工作量;

这是因为消费预取机制会让消费者事先分配好要处理的消息,而不是按能力分配;

4、消费预取的修改

可以在yml文件中修改

    listener:simple:prefetch: 1 #表示预取上限为1

5、重新测试

五、发布和订阅

(一)利用SpringAMQP演示FanoutExchange的使用

1、新建config类,声明交换机和队列
@Configuration
public class FanoutConfig {///1@Beanpublic FanoutExchange fanoutExchange(){return new FanoutExchange("itcast.fanout");}@Beanpublic Queue fanoutQueue1(){return new Queue("fanout.queue1");}@Beanpublic Binding bindingQueue1(FanoutExchange exchange,Queue fanoutQueue1){return BindingBuilder.bind(fanoutQueue1).to(exchange);}///2@Beanpublic Queue fanoutQueue2(){return new Queue("fanout.queue2");}@Beanpublic Binding bindingQueue2(FanoutExchange exchange,Queue fanoutQueue2){return BindingBuilder.bind(fanoutQueue2).to(exchange);}
}
2、启动项目,查看配置

绑定成功

3、编写消费者代码
    @RabbitListener(queues = "fanout.queue1")public void listenFanoutQueue1(String msg){System.err.println("消费者1接收到消息__________-:"+msg+ LocalTime.now());}@RabbitListener(queues = "fanout.queue2")public void listenFanoutQueue2(String msg){System.err.println("消费者2接收到消息__________-:"+msg+ LocalTime.now());}
4、编写生产者代码
    @Testpublic void sendFanoutMassage(){String exchangeName = "itcast.fanout";String message = "Hello Every One";rabbitTemplate.convertAndSend(exchangeName,"",message);}
5、运行代码,观察输出

发现两个消费者都接收到了消息

(二)交换机的作用

  • 接收publisher发送的消息
  • 将消息按照规则路由到与之绑定的队列
  • 不能缓存消息,路由失败,消息丢失
  • FanoutExchange的会将消息路由到每个绑定的队列

(三)声明队列、交换机、绑定关系的Bean是什么?

  • Queue
  • FanoutExchange
  • Binding
     

(四)DirectExchange

实现:

1、编写消费者代码
    @RabbitListener(bindings = @QueueBinding(value = @Queue(name = "direct.queue2"),exchange = @Exchange(name = "itcast.direct",type = ExchangeTypes.DIRECT),key = {"red","blue"}))public void listenDirectQueue1(String msg){System.err.println("消费者1接收到消息__________-:"+msg+ LocalTime.now());}@RabbitListener(bindings = @QueueBinding(value = @Queue(name = "direct.queue2"),exchange = @Exchange(name = "itcast.direct",type = ExchangeTypes.DIRECT),key = {"red","yellow"}))public void listenDirectQueue2(String msg){System.out.println("消费者2接收到消息__________-:"+msg+ LocalTime.now());}
2、编写生产者代码
    @Testpublic void sendDirectMassage(){String exchangeName = "itcast.direct";String message = "Hello Every One1111";rabbitTemplate.convertAndSend(exchangeName,"blue",message);}
    @Testpublic void sendDirectMassage(){String exchangeName = "itcast.direct";String message = "Hello Every One1111";rabbitTemplate.convertAndSend(exchangeName,"red",message);}

(五)Direct交换机与Fanout交换机的差异

  • Fanout交换机将消息路由给每一个与之绑定的队列
  • Direct交换机根据RoutingKey判断路由给哪个队列
  • 如果多个队列具有相同的RoutingKey,则与Fanout功能类似
     

基于@RabbitListener注解声明队列和交换机有哪些常见注解

  • @Queue
  • @Exchange
     

(六)TopicExchange

利用SpringAMQP演示TopicExchange的使用

1、编写消费者代码
    @RabbitListener(bindings = @QueueBinding(value = @Queue(name = "topic.queue1"),exchange = @Exchange(name = "itcast.topic",type = ExchangeTypes.TOPIC),key = "china.#"))public void listenTopicQueue1(String msg){System.out.println("消费者1接收到消息aaaaaa__-:"+msg+ LocalTime.now());}@RabbitListener(bindings = @QueueBinding(value = @Queue(name = "topic.queue2"),exchange = @Exchange(name = "itcast.topic",type = ExchangeTypes.TOPIC),key = "#.news"))public void listenTopicQueue2(String msg){System.err.println("消费者2接收到消息a__-:"+msg+ LocalTime.now());}
2、编写生产者代码
    @Testpublic void sendTopicMassage(){String exchangeName = "itcast.topic";String message = "Hello Every One12222";rabbitTemplate.convertAndSend(exchangeName,"china.news",message);}
3、运行测试

4、描述下Direct交换机与Topic交换机的差异

(七)测试发送Object类型信息

1、新增队列
    @Beanpublic Queue objectQueue(){return new Queue("object.queue");}
2、发送对象
    @Testpublic void sendObjectMassage(){Map<String ,Object> message = new HashMap<>();message.put("name","11");message.put("age","22");rabbitTemplate.convertAndSend("object.queue",message);}
3、查看

对象被序列化了,这种方式性能差,不安全(容易被注入)

4、优化(使用jackson进行序列化)

引入依赖 

        <dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId></dependency>

添加配置Bean

    @Beanpublic Jackson2JsonMessageConverter messageConverter(){return new Jackson2JsonMessageConverter();}

5、接收消息

编写配置Bean

    @Beanpublic Jackson2JsonMessageConverter messageConverter(){return new Jackson2JsonMessageConverter();}

编写消费者代码

@RabbitListener(queues = "object.queue")
public void listenObjectQueue1(Map<String,Object> msg){System.err.println("消费者接收到消息___da_______-:"+msg+ LocalTime.now());
}

验证

注意:

http://www.hkea.cn/news/554983/

相关文章:

  • 专业的营销网站建设公司百度联盟注册
  • 机械类网站用什么做背景指数运算法则
  • 微信如何绑定网站加速游戏流畅的软件
  • 茂名整站优化百度问答首页
  • 手机网站搭建网络宣传方式
  • 2003网站建设网站seo哪家公司好
  • 成都学校网站制作2022年国际十大新闻
  • 工厂外贸网站建设台州网络推广
  • 酒店网站建设方案策划百度seo怎么做网站内容优化
  • 网站更改公司需要重新备案吗搜索网页内容
  • 现在做网站还用dw做模板了吗成人电脑速成培训班
  • 做app要不要建网站刚开的店铺怎么做推广
  • 做生存分析的网站有哪些专业的网站优化公司
  • 网站双倍浮动百度联盟app
  • 北京网站设计确保代码符合w3c广州网络营销的推广
  • 做网站实名认证有什么用百度移动端模拟点击排名
  • 知更鸟wordpress 怎样沈阳百度seo关键词优化排名
  • 携程网站模板互联网营销策略有哪些
  • 做网站内链什么意思上海排名优化seobwyseo
  • 四川做直销会员网站百度网盘帐号登录入口
  • 做百度竞价对网站有无要求网站推广排名服务
  • 建设工程合同包括成都网站改版优化
  • 深圳不加班的互联网公司整站seo优化
  • 中国做的很好的食品网站肇庆疫情最新消息
  • 做时时彩网站微信seo关键词有话要多少钱
  • 陇南市建设局网站商务软文写作
  • 做学术研究的网站营销方案怎么写?
  • 专业网站设计公司有哪些秒收录关键词代发
  • 织梦网站模板源码下载真实有效的优化排名
  • 网站建设过程中什么最重要磁力链bt磁力天堂