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

代理推广seo怎么去优化网站

代理推广,seo怎么去优化网站,自己的网站没有域名,国内网站欣赏文章目录 一、框架及逻辑介绍1.背景服务介绍2.问题逻辑介绍 二、代码1.A服务2.B服务3.C服务 三、解决思路1.确认B调用C服务接口是否能正常调通2.确认B服务是否能正常调用A服务3.确认消息能否正常消费4.总结 四、修改代码验证1.B服务异步调用C服务接口——失败2.将消费消息放到C… 文章目录 一、框架及逻辑介绍1.背景服务介绍2.问题逻辑介绍 二、代码1.A服务2.B服务3.C服务 三、解决思路1.确认B调用C服务接口是否能正常调通2.确认B服务是否能正常调用A服务3.确认消息能否正常消费4.总结 四、修改代码验证1.B服务异步调用C服务接口——失败2.将消费消息放到C服务中消费时直接调用service——成功 五、结论 走过路过大神帮忙给个正确解决方案~~~~~ 一、框架及逻辑介绍 1.背景服务介绍 微服务结构目前有A、B、C三个服务。 A服务做一些工具类的功能B服务类似于门户调用A、C服务来给到前端C服务基础模块日志、权限、数据维护 2.问题逻辑介绍 A服务实现blast功能该功能是异步任务需要几分钟的时间才能执行完成所以采用了消息队列的方式通知功能完成可查看数据。当代码执行完成之后通过rabbitmq发送消息到B服务B服务消费消息调用C服务存储完成通知数据C服务提供FeignClient接口 二、代码 1.A服务 业务代码详细的逻辑部分就不列出代码部分了 测试确认无问题。 Api(tags blast工具) RequiredArgsConstructor RequestMapping(blast) RestController public class BlastController {private final BlastService blastService;PostMapping(uniport)ApiOperation(蛋白质序列对比)public ApiResponseBoolean check(RequestBody BlastEntity blastEntity) {boolean flag blastService.check(blastEntity);if(flag){return ApiResponse.success(flag);}else{return ApiResponse.failure(序列比对失败);}}GetMapping(uniportDetail)ApiOperation(蛋白质序列对比详情)public ApiResponseBlastLogEntity selectDetailById(ApiParam(主键) RequestParam(id) Integer id){return ApiResponse.success(blastService.selectDetailById(id));} }通过FeignClient提供功能接口给B服务门户 FeignClient(name tool, url ${customer.tool-url}) public interface DataClient {PostMapping(/blast/uniport)ApiOperation(蛋白质序列对比)ApiResponseBoolean checkBlastUniprot(RequestBody BlastEntity blastEntity);GetMapping(/blast/uniportDetail)ApiOperation(蛋白质序列对比详情)ApiResponseBlastLogEntity selectDetailById(ApiParam(主键) RequestParam(id) Integer id); }通过Rabbitmq发送消息 Configuration public class DirectRabbitMQConfig {//创建一个名为TestDirectExchange的Direct类型的交换机BeanDirectExchange directExchange(){// durable:是否持久化,默认是false,持久化交换机。// autoDelete:是否自动删除交换机先有队列或者其他交换机绑定的时候然后当该交换机没有队列或其他交换机绑定的时候会自动删除。// arguments交换机设置的参数比如设置交换机的备用交换机Alternate Exchange当消息不能被路由到该交换机绑定的队列上时会自动路由到备用交换机return new DirectExchange(RabbitMqConstants.EXCHANGE_NAME,true,false);}//创建一个名为insertChassisDirectQueue的队列Beanpublic Queue insertBlastDirectQueue(){// durable:是否持久化,默认是false,持久化队列会被存储在磁盘上当消息代理重启时仍然存在暂存队列当前连接有效// exclusive:默认也是false只能被当前创建的连接使用而且当连接关闭后队列即被删除。此参考优先级高于durable// autoDelete:是否自动删除有消息者订阅本队列然后所有消费者都解除订阅此队列会自动删除。// arguments队列携带的参数比如设置队列的死信队列消息的过期时间等等。return new Queue(RabbitMqConstants.INSERT_BLAST_NAME,true);}//绑定交换机和队列BeanBinding insertBlastDirect(){return BindingBuilder.bind(insertBlastDirectQueue()).to(directExchange()).with(RabbitMqConstants.INSERT_BLAST_KEY);} } 2.B服务 消费消息根据输出日志可以看到消费消息成功。 但是走到apiClient.addLogMessage(logMessageEntity);不报错C服务无响应断点查看apiClient是可以看到C服务的信息localhost:8080的。 RabbitHandlerRabbitListener(bindings {QueueBinding(value Queue(value INSERT_BLAST_NAME, durable true),exchange Exchange(value RabbitMqConstants.EXCHANGE_NAME),key INSERT_BLAST_KEY)})public void insertBlast(Map map, Channel channel, Message message) {try {LOGGER.info(【生成的消息-blast序列比对结果】:{}, map.toString());channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);BlastLogEntity blastLogEntity TypeSwitchUtil.toSnakeObject(JSON.toJSONString(map), BlastLogEntity.class);if (null blastLogEntity || StringUtils.isEmpty(blastLogEntity.getContent())) {LOGGER.warn(【生成的消息-blast序列比对结果】:{}, map.toString());} else {LogMessageEntity logMessageEntity new LogMessageEntity();logMessageEntity.setTargetId(blastLogEntity.getId());logMessageEntity.setUserId(String.valueOf(blastLogEntity.getUserId()));logMessageEntity.setMsgType(MsgStatusEnum.BLAST.getCode());logMessageEntity.setContent(MsgStatusEnum.BLAST.getMsg());apiClient.addLogMessage(logMessageEntity);}} catch (Exception e) {LOGGER.error(e.getMessage());}}3.C服务 FeignClient(name api, url ${customer.url}, configuration FeignConfig.class) public interface ApiClient {PostMapping(/cms/logMessage/add)ApiOperation(新增系统通知发送记录)ApiResponseBoolean addLogMessage(RequestBody LogMessageEntity logMessageEntity); }三、解决思路 1.确认B调用C服务接口是否能正常调通 在B服务中通过Controller暴露接口调用C服务FeignClient的PostMapping(/cms/logMessage/add) 接口通过swagger测试数据成功存储到数据库中。 ——接口没有问题服务之间通信也没有问题 2.确认B服务是否能正常调用A服务 在B服务中调用A服务接口测试成功。 ——服务之间通信没有问题 3.确认消息能否正常消费 在B服务中调用A服务接口A服务输出发送消息日志。B服务消费输出日志。 ——消息无问题 4.总结 服务之间通信没有问题 消息提供和消费没有问题 综合猜测可能是线程或事务问题。 四、修改代码验证 1.B服务异步调用C服务接口——失败 RabbitHandlerRabbitListener(bindings {QueueBinding(value Queue(value INSERT_BLAST_NAME, durable true),exchange Exchange(value RabbitMqConstants.EXCHANGE_NAME),key INSERT_BLAST_KEY)})public void insertBlast(Map map, Channel channel, Message message) {try {LOGGER.info(【生成的消息-blast序列比对结果】:{}, map.toString());channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);BlastLogEntity blastLogEntity TypeSwitchUtil.toSnakeObject(JSON.toJSONString(map), BlastLogEntity.class);if (null blastLogEntity || StringUtils.isEmpty(blastLogEntity.getContent())) {LOGGER.warn(【生成的消息-blast序列比对结果】:{}, map.toString());} else {LogMessageEntity logMessageEntity new LogMessageEntity();logMessageEntity.setTargetId(blastLogEntity.getId());logMessageEntity.setUserId(String.valueOf(blastLogEntity.getUserId()));logMessageEntity.setMsgType(MsgStatusEnum.BLAST.getCode());logMessageEntity.setContent(MsgStatusEnum.BLAST.getMsg());CompletableFuture.runAsync(() - {apiClient.addLogMessage(logMessageEntity);});}} catch (Exception e) {LOGGER.error(e.getMessage());}}经测试未能解决问题。 2.将消费消息放到C服务中消费时直接调用service——成功 RabbitHandlerRabbitListener(bindings {QueueBinding(value Queue(value blast.insert.queue, durable true),exchange Exchange(value tool),key blast.insert)})public void insertBlast(Map map, Channel channel, Message message) {try {LOGGER.info(【生成的消息-blast序列比对结果】:{}, map.toString());channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);if (null map || StringUtils.isEmpty(map.get(id).toString())) {LOGGER.warn(【生成的消息-blast序列比对结果】:{}, map.toString());} else {LogMessageEntity logMessageEntity new LogMessageEntity();logMessageEntity.setTargetId(Integer.valueOf(map.get(id).toString()));logMessageEntity.setUserId(String.valueOf(map.get(user_id)));logMessageEntity.setMsgType(MsgStatusEnum.BLAST.getCode());logMessageEntity.setContent(MsgStatusEnum.BLAST.getMsg());logMessageService.save(logMessageEntity);}} catch (Exception e) {LOGGER.error(e.getMessage());}}五、结论 在使用消息队列MQ调用FeignClient服务时采取以下步骤 配置消息队列首先确保已正确配置和启动您所使用的消息队列例如 RabbitMQ 或者 Kafka。 创建消息生产者创建一个消息生产者用于将消息发送到消息队列。您可以使用消息队列的客户端库或框架来实现此功能。 发送消息在需要调用FeignClient服务的地方将消息发送到消息队列。消息中包含请求的相关信息例如服务名称、路径、参数等。 创建消息消费者创建一个消息消费者用于从消息队列接收消息并处理。 处理消息在消息消费者中处理接收到的消息。根据消息中的请求信息使用FeignClient来调用相应的服务。 虽然通过直接调用service的方式成功进行数据存储了这样做也没有违背原有的逻辑。 但是问题仍然没有一个正确的解决方式希望走过路过的大神能指点一二在线求助。 走过路过大神帮忙给个正确解决方案~~~~~
http://www.hkea.cn/news/14448882/

相关文章:

  • 浙江建设监理协会官方网站秦皇岛网站搜索优化
  • 电商网站开发经验建筑人才网有哪些
  • php网站开发需求文档网站如何做伪静态
  • 域名访问网站啥意思公司网站百度小程序开发
  • 成都人才网站建设学动漫设计有前途吗
  • 代理网站建设wordpress修改鼠标
  • o2o手机网站建设技术网页转app工具
  • 蒲城县住房和城乡建设局网站网站内容与模板设计
  • 聚牛网站建设公司海宁建设局网站
  • 把网站做成静态页面智能展厅展馆建设
  • 宣传京津风筝网站的建设目的网站建设 中企动力南通
  • 东莞市做阀门的网站深圳商场设计公司排名
  • 移动网站开发教学大纲无锡网站建设服务
  • 网站建设之织梦模板自学网站建设看什么书
  • 电商设计网站有哪些内容商城源码免费
  • 哪类网站赚钱 优帮云网站建设与管理的总结
  • 上海市做网站网站建设费用的会计分录
  • 网站开发用盗版犯法阿里云域名注册万网
  • 万网怎样做网站调试大连城市建设网站
  • 装修公司网站要给公司做一个网站怎么做的
  • 百度文库怎么做网站排名wordpress 自适应
  • 天津网站开发价格小吃加盟网站大全
  • 广州建设集团网站淘宝网站c#设计怎么做
  • 晋江网友交流区网站网页设计实验报告分析
  • vs做网站开发吗浏览器观看的视频怎么下载
  • 佛山南海网站开发360街景地图最新版
  • 网站做平台网络公司 网站设计
  • 成都企业做网站黑龙江网站建设开发
  • 高新快速建设网站电话wordpress提问插件
  • 网站建设成功案例宣传大数据下的精准营销