首页 文章 精选 留言 我的

精选列表

搜索[开发者预览],共10003篇文章
优秀的个人博客,低调大师

Pushup v0.1 预览版发布,Go Web 框架

Pushup 发布了首个 Preview 版本:0.1。 Pushup 是一个实验性的新项目,使用 Go 创建现代、面向页面的 Web 应用。Pushup 旨在探索使用 Go 轻松构建面向页面的服务器端 Web 应用程序。 此版本目前初步实现了以下功能: 固定的 project/app 目录结构,支持基于文件的路由(file-based routing) 可替代传统 Web 框架目标的轻量级标记语法(lightweight markup),将用于控制流的 Go 代码和命令式、类似视图控制器的代码与 HTML 标记相结合 解析上述标记语法并生成纯 Go 代码的编译器(compiler),在 Go stdlibnet/http包之上构建独立的 Web 应用程序 示例代码 ^import "time" ^{ title := "Hello, from Pushup!" } <h1>^title</h1> <p>The time is now ^time.Now().String().</p> ^if time.Now().Weekday() == time.Friday { <p>It's Friday! Enjoy the start to your weekend.</p> } ^else { <p>Have a great day, we're glad you're here.</p> } Fileapp/pages/hello.up→/helloURL path Pushup 示例应用的目录结构 /path/to/mypushupapp ├── layouts │ └── default.up ├── pages │ └── index.up ├── pkg │ └── app.go └── static ├── app.css └── htmx.min.js 详情查看 Release Notes。

优秀的个人博客,低调大师

事件领域模型 kaka-core 5.0 预览版发布

kaka-core 是一项服务于 Java 后端的事件领域模型,全局事件通知框架。 kaka-core 已移至 https://gitee.com/zkpursuit/kaka-core , 并支持 maven 直接安装。 本次更新新增与第三方消息队列对接的功能 1、稍加编码就能对接市面上所有第三方消息队列。 2、通过消息队列派发和消费事件可由远程事件处理器处理并返回处理结果。 3、返回处理结果与本地执行事件完全相同(注:SyncResult消费处理远程事件时不可用)。 4、事件保证一次消费处理,不会多次重复处理。 5、稳定性完全由第三方消息队列决定。 原理:每个事件调度中心为消息的发布者亦为消息的订阅者,派发事件即将事件发布到消息队列,订阅者消费到事件后本地化处理事件,处理完成后再次将事件发布到消息队列,根据事件ID在发送方找到缓存在内存的原始事件对象并进行结果赋值或回调。 原理执行流程图(感谢用户 微信名:碧涛 提供此图): 基本范例: Facade facade = FacadeFactory.getFacade(); //以下通过ActiveMQ消息队列消费处理事件,并获得事件处理结果 facade.initRemoteMessageQueue(new ActiveMQ("event_exec_before", "event_exec_after")); //此行全局一次设定 Message message = new Message("20000", "让MyCommand接收执行"); IResult<String> result4 = message.setResult("ResultMsg", new AsynResult<>(5000)); facade.sendMessageByQueue(message); System.out.println("消息队列消费处理事件结果:" + result4.get()); facade.sendMessageByQueue(new Message("40000", "", (IResult<Object> result) -> { String clasz = ((CallbackResult<Object>) result).eventHanderClass; StringBuilder sb = new StringBuilder("消息队列消费处理事件结果异步回调:\t" + clasz + "\t"); Object resultObj = result.get(); if (resultObj instanceof Object[]) { Object[] ps = (Object[]) resultObj; sb.append(Arrays.toString(ps)); } else { sb.append(resultObj); } System.out.println(sb); })); package kaka.test; import com.kaka.notice.RemoteMessageQueue; import kaka.test.util.KryoSerializer; import kaka.test.util.Serializer; import org.apache.activemq.ActiveMQConnection; import org.apache.activemq.ActiveMQConnectionFactory; import javax.jms.*; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.function.Consumer; /** * 本类仅为测试用例,ActiveMQ消息队列的访问实现代码是否为最优不做考虑,在此仅为范例参考 */ public class ActiveMQ extends RemoteMessageQueue { private static class TestLocalMessageCache implements LocalMessageCache { private final Map<String, com.kaka.notice.Message> localMap = new ConcurrentHashMap<>(); @Override public void add(String id, com.kaka.notice.Message message) { localMap.put(id, message); } @Override public com.kaka.notice.Message remove(String id) { return localMap.remove(id); } } private static final String BROKER_URL = "tcp://101.34.22.36:61616"; private final ActiveMQConnectionFactory activeMQConnectionFactory; private final Serializer<MessageWrap> eventSerializer = new KryoSerializer<>(); public ActiveMQ(String beforeTopic, String afterTopic) { super(beforeTopic, afterTopic); this.activeMQConnectionFactory = new ActiveMQConnectionFactory( ActiveMQConnection.DEFAULT_USER, ActiveMQConnection.DEFAULT_PASSWORD, BROKER_URL); this.init(); } @Override protected LocalMessageCache initLocalMessageCache() { return new TestLocalMessageCache(); } @Override protected void publishEventMessage(MessageWrap msgWrap, String topic) { byte[] bytes = this.eventSerializer.serialize(msgWrap); try { Connection connection = activeMQConnectionFactory.createConnection(); connection.start(); Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); MessageProducer producer = session.createProducer(session.createQueue(topic)); producer.setDeliveryMode(DeliveryMode.PERSISTENT); BytesMessage bytesMessage = session.createBytesMessage(); bytesMessage.writeBytes(bytes); producer.send(bytesMessage); producer.close(); connection.close(); session.close(); } catch (JMSException e) { e.printStackTrace(); } } private void init() { new Thread(() -> { try { consume(beforeTopic, (byte[] bytes) -> { MessageWrap remoteMsgWrap = eventSerializer.deserialize(bytes); receivedBeforeEventMessage(remoteMsgWrap); //这里很重要,必须调用 }); } catch (Exception e) { e.printStackTrace(); } }).start(); new Thread(() -> { try { consume(afterTopic, (byte[] bytes) -> { MessageWrap remoteMsgWrap = eventSerializer.deserialize(bytes); receivedAfterEventMessage(remoteMsgWrap); //这里很重要,必须调用 }); } catch (Exception e) { e.printStackTrace(); } }).start(); } private void consume(String topic, Consumer<byte[]> callback) throws Exception { Connection connection = this.activeMQConnectionFactory.createConnection(); connection.start(); Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); Destination destination = session.createQueue(topic); MessageConsumer consumer = session.createConsumer(destination); while (true) { Message message = consumer.receive(); if (null == message) break; if (message instanceof BytesMessage) { BytesMessage bytesMessage = (BytesMessage) message; try { int byteSize = (int) bytesMessage.getBodyLength(); byte[] bytes = new byte[byteSize]; bytesMessage.readBytes(bytes); callback.accept(bytes); } catch (JMSException e) { e.printStackTrace(); } } } consumer.close(); session.close(); connection.close(); } } 以上范例完整代码可在源码 test 中查阅, 源码地址:https://gitee.com/zkpursuit/kaka-core/tree/master/src/test/java/kaka/test

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册