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

学生个人网站建设方案书框架栏目windows server2012 wordpress

学生个人网站建设方案书框架栏目,windows server2012 wordpress,南京模板建站哪家好,网站做排名有用吗目录 1. 说明2. 截图2.1 接口调用截图2.2 项目结构截图 3. 代码示例 1. 说明 1.实现的是一个简单的sse接口#xff0c;单向的长连接#xff0c;后端可以向前端不断输出数据。2.通过调用sse接口#xff0c;触发rabbitmq向队列塞消息#xff0c;向前端返回一个sseEmitter对象… 目录 1. 说明2. 截图2.1 接口调用截图2.2 项目结构截图 3. 代码示例 1. 说明 1.实现的是一个简单的sse接口单向的长连接后端可以向前端不断输出数据。2.通过调用sse接口触发rabbitmq向队列塞消息向前端返回一个sseEmitter对象。3.rabbitmq监听队列消息消费消息后向sseEmitter对象写入内容。4.当业务逻辑结束调用emitter.complete()方法结束此次会话。5.这里举一个问答的示例采用的是work模式逻辑比较简单仅供参考。 2. 截图 2.1 接口调用截图 2.2 项目结构截图 3. 代码示例 1.pom依赖 ?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.5.4/version/parentgroupIdcom.learning/groupIdartifactIdspringboot/artifactIdversion1.0-SNAPSHOT/versiondependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactIdversion2.5.4/version/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-amqp/artifactId/dependencydependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactIdversion2.12.4/version/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/dependency/dependencies!--打jar包使用--buildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins/build /project2.application.yaml spring:# rabbbitmq配置信息rabbitmq:host: 192.168.2.11port: 5672username: adminpassword: adminvirtual-host: /3.rabbitmq配置类 package com.learning.config;import org.springframework.amqp.core.*; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap;/*** rabbitmq配置类*/ Configuration public class RabbitMQConfig{/*** 存sseEmitter*/Bean(emitterMap)public ConcurrentMapString, SseEmitter emitterMap(){ConcurrentMapString, SseEmitter emitters new ConcurrentHashMap();return emitters;}/*** 工作模式交换机名*/public static final String EXCHANGE_NAME work_exchange;/*** 工作模式队列名*/public static final String QUEUE_NAME work_queue; Bean(work_queue)public Queue queue() { return new Queue(QUEUE_NAME, true); } Bean(work_exchange)public Exchange exchange() {return ExchangeBuilder.directExchange(EXCHANGE_NAME).durable(true).build();} Bean public Binding binding(Qualifier(work_queue) Queue queue,Qualifier(work_exchange) Exchange exchange) {return BindingBuilder.bind(queue).to(exchange).with(work_routing_key).noargs();} }4.controller类 package com.learning.controller;import com.learning.service.QuestionService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; import java.util.UUID; import java.util.concurrent.ConcurrentMap;/*** Author wangyouhui* Description 获取答案**/ RestController RequestMapping(/question) public class QuestionController {Autowiredprivate QuestionService questionService;Autowiredprivate ConcurrentMapString, SseEmitter emitterMap;PostMapping(value/ask, produces MediaType.TEXT_EVENT_STREAM_VALUE)public SseEmitter ask(RequestParam String question) {String questionId UUID.randomUUID().toString();SseEmitter emitter new SseEmitter();emitterMap.put(questionId, emitter);questionService.ask(questionId, question);return emitter;} } 5.消息实体 package com.learning.dto;import lombok.Data;import java.io.Serializable;/*** Author wangyouhui* Description 消息**/ Data public class MessageDTO implements Serializable {private String questionId;private String question;private String answer;private Boolean end; } 6.service实现类 package com.learning.service.impl;import com.fasterxml.jackson.databind.ObjectMapper; import com.learning.config.RabbitMQConfig; import com.learning.dto.MessageDTO; import com.learning.service.QuestionService; import com.rabbitmq.client.Channel; import org.springframework.amqp.core.Message; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;import java.io.IOException; import java.util.concurrent.ConcurrentMap;/*** Author wangyouhui* Description**/ Service public class QuestionServiceImpl implements QuestionService {Autowiredprivate RabbitTemplate rabbitTemplate;Autowiredprivate ConcurrentMapString, SseEmitter emitterMap;RabbitListener(queues RabbitMQConfig.QUEUE_NAME, ackMode MANUAL)public void receiveMessage(Message message, Channel channel) {long deliveryTag message.getMessageProperties().getDeliveryTag();try {String json new String(message.getBody());ObjectMapper mapper new ObjectMapper();MessageDTO messageDTO mapper.readValue(json, MessageDTO.class);SseEmitter sseEmitter emitterMap.get(messageDTO.getQuestionId());if(sseEmitter ! null){sseEmitter.send(messageDTO);}if(messageDTO.getEnd() ! null messageDTO.getEnd()){sseEmitter.complete();emitterMap.remove(messageDTO.getQuestionId());}// 手动签收channel.basicAck(deliveryTag, false);} catch (IOException e) {e.printStackTrace();// 拒绝签收消息重新入队try {channel.basicReject(deliveryTag, true);} catch (IOException ioException) {ioException.printStackTrace();}}}Overridepublic void ask(String questionId, String question) {MessageDTO message1 new MessageDTO();message1.setQuestionId(questionId);message1.setQuestion(question);message1.setAnswer(您好这个);message1.setEnd(false);this.sendMessage(message1);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}MessageDTO message2 new MessageDTO();message2.setQuestionId(questionId);message2.setQuestion(question);message2.setAnswer(您好这个是答案);message2.setEnd(false);this.sendMessage(message2);try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}MessageDTO message3 new MessageDTO();message3.setQuestionId(questionId);message3.setQuestion(question);message3.setAnswer(您好这个是答案,请问是否能解决你的问题);message3.setEnd(true);this.sendMessage(message3);}public void sendMessage(MessageDTO message){ObjectMapper mapper new ObjectMapper();String json null;try {json mapper.writeValueAsString(message);rabbitTemplate.convertAndSend(work_exchange, work_routing_key, json);} catch (Exception e) {e.printStackTrace();}} } 7.service接口 package com.learning.service;/*** Author wangyouhui* Description **/ public interface QuestionService {void ask(String questionId, String question); } 8.应用类 package com.learning;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;/*** Author wangyouhui* Description**/ SpringBootApplication public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);} }
http://www.hkea.cn/news/14421189/

相关文章:

  • jsp网站怎么运行前端开发语言有哪些
  • 茂名放心营销网站开发商务贸易网站建设
  • 聊城做网站公司信息钓鱼网站下载
  • 网站建设总结材料观影楼网站
  • 产品介绍网站htmlwordpress最大上传尺寸
  • 做网站_没内容网站建设太金手指六六二八
  • 网站优化要怎么做才会做到最佳wordpress注册时添密码
  • 网站地图后缀中国行业信息网官网
  • 视频搜索引擎网站开发方法绍兴h5建站
  • 管理型网站建设费用明细qingdao城乡住房建设厅网站
  • 建设网站作业电子商务公司建设网站方案设计
  • 东莞住建局官方网站wordpress+icon+修改
  • 局域网内个人网站建设百度收录入口查询注意事项
  • 自己弄网站需要多少钱种子搜索神器下载
  • 网站地图咋做做网站设计收入
  • 春哥 响应式网站建设长沙市做网站公司排名
  • 昆明网站开发不干净的软件下载网站
  • 静态网站开发步骤网站备案的要求是
  • 旅游设计专业网站洛阳做网站推广
  • 网站举报官网网站为什么不收录
  • 帝国cms7.0网站地图网站建设实践鉴定
  • 如何给公司做自己的网站wordpress 响应式 企业
  • 网站建设创新成果免费ai设计logo网站
  • 网站内链建设方法小波app推广网
  • 找个做游戏的视频网站好做微商能利用的网站有哪些问题
  • 一次性筷子网站建设辽宁建设工程信息网怎么业绩加分
  • 南昌网站建设讯息万网建网站流程
  • 山东菏泽网站建设做网站的题目
  • 网站建设 中企动力嘉兴0573子商务网站建设的一般流程
  • 电脑公司网站建设模板access 网站内容管理系统 哪个好 下载