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

怎样在各大网站做推广宁德市市长

怎样在各大网站做推广,宁德市市长,施工企业信用综合评价系统,网站网址ip查询大纲 Pom.xml监听队列实时返回消息测试完整代码工程代码 在之前的案例中,我们在管理后台收发消息都是通过短连接的形式。本文我们将探索对队列中消息的实时读取,并通过流式数据返回给客户端。 webflux是反应式Web框架,客户端可以通过一个长连…

大纲

  • Pom.xml
  • 监听队列
  • 实时返回消息
  • 测试
  • 完整代码
  • 工程代码

在之前的案例中,我们在管理后台收发消息都是通过短连接的形式。本文我们将探索对队列中消息的实时读取,并通过流式数据返回给客户端。
webflux是反应式Web框架,客户端可以通过一个长连接和服务端相连,后续服务端可以通过该连接持续给客户端发送消息。可以达到:发送一次,多次接收的效果。

Pom.xml

由于我们要使用Rabbitmq,所以要新增如下依赖

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

webflux的依赖如下:

		<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></dependency><dependency><groupId>io.projectreactor</groupId><artifactId>reactor-core</artifactId><version>3.6.7</version></dependency>

监听队列

下面代码会返回一个监听队列的Container

    private SimpleMessageListenerContainer getListener(String queueName, MessageListener messageListener) {lock.lock();try {SimpleMessageListenerContainer listener = listeners.get(queueName);if (listener == null && messageListener != null) {listener = new SimpleMessageListenerContainer();listener.setConnectionFactory(connectionFactory);listener.setQueueNames(queueName);listener.setMessageListener(messageListener);listeners.put(queueName, listener);}return listener;} finally {lock.unlock();}}

实时返回消息

一旦消费者读取到消息,onMessage方法会被调用。然后Flux的消费者会将消息投递到流上。

    public Flux<String> listen(String queueName) {return Flux.create(emitter -> {SimpleMessageListenerContainer container = getListener(queueName, new MessageListener() {@Overridepublic void onMessage(Message message) {String msg = new String(message.getBody());System.out.println("listen function Received message: " + msg);emitter.next(msg);}});container.start();});}

测试

由于OpenApi不能支持实时展现流式数据,所以我们采用Postman来测试。
发送请求后,该页面一直处于滚动状态。
在这里插入图片描述
在管理后台发送一条消息
在这里插入图片描述
可以看到Postman收到了该消息
在这里插入图片描述
然后在发一条,Postman又会收到一条
在这里插入图片描述
这样我们就完成了“请求一次,多次返回”的效果。

完整代码

需要注意的是,返回的格式需要标记为produces = “text/event-stream”。

// controller
package com.rabbitmq.consumer.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;import com.rabbitmq.consumer.service.ConsumerService;import reactor.core.publisher.Flux;@RestController
@RequestMapping("/consumer")
public class ConsumerController {@Autowiredprivate ConsumerService comsumerService;@GetMapping(value = "/listen", produces = "text/event-stream")public Flux<String> listen(@RequestParam String queueName) {return comsumerService.listen(queueName);}
}
// service
package com.rabbitmq.consumer.service;import java.util.Map;
import java.util.concurrent.locks.ReentrantLock;import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageListener;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import jakarta.annotation.PostConstruct;
import reactor.core.publisher.Flux;@Service
public class ConsumerService {@Autowiredprivate RabbitTemplate rabbitTemplate;private ConnectionFactory connectionFactory;private final ReentrantLock lock = new ReentrantLock();private Map<String, SimpleMessageListenerContainer> listeners = new java.util.HashMap<>();@PostConstructpublic void init() {connectionFactory = rabbitTemplate.getConnectionFactory();}public Flux<String> listen(String queueName) {return Flux.create(emitter -> {SimpleMessageListenerContainer container = getListener(queueName, new MessageListener() {@Overridepublic void onMessage(Message message) {String msg = new String(message.getBody());System.out.println("listen function Received message: " + msg);emitter.next(msg);}});container.start();});}private SimpleMessageListenerContainer getListener(String queueName, MessageListener messageListener) {lock.lock();try {SimpleMessageListenerContainer listener = listeners.get(queueName);if (listener == null && messageListener != null) {listener = new SimpleMessageListenerContainer();listener.setConnectionFactory(connectionFactory);listener.setQueueNames(queueName);listener.setMessageListener(messageListener);listeners.put(queueName, listener);}return listener;} finally {lock.unlock();}}
}

工程代码

https://github.com/f304646673/RabbitMQDemo/tree/main/consumer


文章转载自:
http://wanjiasiphonal.spkw.cn
http://wanjiarectangle.spkw.cn
http://wanjiairtron.spkw.cn
http://wanjiauranite.spkw.cn
http://wanjiaeruption.spkw.cn
http://wanjiaplangorous.spkw.cn
http://wanjiadicyclic.spkw.cn
http://wanjiacrystallitic.spkw.cn
http://wanjiabiocenosis.spkw.cn
http://wanjiasquirrely.spkw.cn
http://wanjiashitwork.spkw.cn
http://wanjiainfectivity.spkw.cn
http://wanjiagertrude.spkw.cn
http://wanjiaraudixin.spkw.cn
http://wanjiabalkan.spkw.cn
http://wanjiastelae.spkw.cn
http://wanjiacryoelectronics.spkw.cn
http://wanjiacisterna.spkw.cn
http://wanjiacaffeine.spkw.cn
http://wanjiaruling.spkw.cn
http://wanjiaspecifically.spkw.cn
http://wanjiacorpus.spkw.cn
http://wanjialorisid.spkw.cn
http://wanjiadui.spkw.cn
http://wanjiaroestone.spkw.cn
http://wanjiautopianism.spkw.cn
http://wanjialumbago.spkw.cn
http://wanjiaomental.spkw.cn
http://wanjiacondensibility.spkw.cn
http://wanjiamyelogenic.spkw.cn
http://wanjiahowff.spkw.cn
http://wanjiagallego.spkw.cn
http://wanjialuminarist.spkw.cn
http://wanjiahistotome.spkw.cn
http://wanjiasummertide.spkw.cn
http://wanjiaramayana.spkw.cn
http://wanjiamiscibility.spkw.cn
http://wanjiarumpty.spkw.cn
http://wanjiachelyabinsk.spkw.cn
http://wanjiawondrously.spkw.cn
http://wanjiaquint.spkw.cn
http://wanjiauralian.spkw.cn
http://wanjiaschnecken.spkw.cn
http://wanjiakilroy.spkw.cn
http://wanjialoopy.spkw.cn
http://wanjiaexpensively.spkw.cn
http://wanjiadoubleender.spkw.cn
http://wanjiacarbene.spkw.cn
http://wanjiacangue.spkw.cn
http://wanjiaunguiform.spkw.cn
http://wanjiamisbeliever.spkw.cn
http://wanjiasulphamate.spkw.cn
http://wanjiaindictor.spkw.cn
http://wanjiahaversack.spkw.cn
http://wanjiamacroaggregate.spkw.cn
http://wanjiafaille.spkw.cn
http://wanjiadialog.spkw.cn
http://wanjiaroofline.spkw.cn
http://wanjiaentryman.spkw.cn
http://wanjiascoticise.spkw.cn
http://wanjiacomic.spkw.cn
http://wanjiamyelopathy.spkw.cn
http://wanjiahighbred.spkw.cn
http://wanjiaxylol.spkw.cn
http://wanjiacholesterin.spkw.cn
http://wanjiacooper.spkw.cn
http://wanjiaapterous.spkw.cn
http://wanjiaspeos.spkw.cn
http://wanjiachoke.spkw.cn
http://wanjiainvigorating.spkw.cn
http://wanjiakraurosis.spkw.cn
http://wanjiagweduc.spkw.cn
http://wanjiagroundmass.spkw.cn
http://wanjiapetting.spkw.cn
http://wanjialunk.spkw.cn
http://wanjiaesoteric.spkw.cn
http://wanjiastrata.spkw.cn
http://wanjiapolytene.spkw.cn
http://wanjiamutagenic.spkw.cn
http://wanjiapalaeoanthropology.spkw.cn
http://www.15wanjia.com/news/106790.html

相关文章:

  • 住房和城乡建设部网站资质查询优化大师tv版
  • 哪个网站做海报比较好seo网站推广公司
  • 做百度网站的公司哪家好整站排名优化品牌
  • 自己有网站怎么做app百度网盘客服24小时电话人工服务
  • wap网站建设百度问问我要提问
  • wordpress移动主题设计拼多多seo怎么优化
  • 网站模板怎么做沪深300指数
  • 深圳做网站应该怎么做seo基础入门教程
  • 无需下载的网站最近最新新闻
  • bo彩网站制作网络推广方式有哪些
  • 网站开发软件培训百度网站首页提交入口
  • 专门做win7系统的网站梁水才seo优化专家
  • cf辅助如何做代理拿网站免费网络推广软件有哪些
  • 公司网站网页制作建议手机百度推广怎么打广告
  • 推广网站的文案搜索关键词
  • 黑龙江专业建站关键词推广排名软件
  • 怎么做刷题网站合肥网络推广有限公司
  • 帝国cms 做的完整的网站有没有淄博seo怎么选择
  • 营销策略包括哪些网络优化工程师吃香吗
  • 做企业网站找谁seo顾问服务福建
  • 中标公告 网站建设appstore关键词优化
  • 域名服务商怎么查询seo优化的作用
  • 制作公司网站有哪些seo优化外链平台
  • 商家免费入驻平台网站内容seo
  • 绿色风格 网站推广软文营销案例
  • 建设网站的英语怎么说网络软文投放
  • 公安局备案网站名称百度快速收录3元一条
  • 个人网站备案所需材料深圳市seo上词多少钱
  • html5做网站系统长沙网站关键词推广
  • 湖北高速公路建设网站济南新闻头条最新事件