swarm:pending_WildFly Swarm:使用Java EE构建微服务

swarm:pending

“完美无缺,不是在没有其他可添加的东西时,而是在没有其他东西要带走时实现的” Antoine de Saint-Exupery

法国作家安托万·德·圣艾修伯里 ( Antoine de Saint-Exupery )的这句话是为了证实通常少花钱多。 对于建筑师,艺术家,设计师,作家,跑步者,软件开发人员或任何其他专业而言,都是如此。 简洁,极简主义,减少工作量总有很长的路要走,并且相对于肿的东西有很多优点。

什么是WildFly Swarm?

WildFly是一款轻巧,灵活,功能丰富且符合Java EE 7的应用程序服务器。 WildFly 9甚至引入了仅27MB的Servlet发行版 。 这些非常适合您的企业和Web应用程序。

WildFly Swarm将缺口提高了一点。 从公告中 :

WildFly Swarm是一个新的sidecar项目,支持WildFly 9.x,以实现对WildFly AS的解构并将其与应用程序一起粘贴回去,以创建一个独立的可执行jar。 苍蝇群

Java EE应用程序的典型应用程序开发模型是创建EAR或WAR归档文件并将其部署在应用程序服务器中。 所有依赖项(例如Java EE实现)都打包在应用程序服务器中,并提供应用程序类所需的功能。 可以部署多个档案,它们都共享相同的库。 这是一个很好理解的模型,并且已在过去的几年中使用。

WildFly Swarm将表旋转到它创建“胖罐”的地方,该胖罐将所有依赖项打包在JAR文件中。 这包括WildFly的极简版本,任何必需的依赖关系,以及应用程序代码本身。 该应用程序可以简单地使用java -jar运行。

每个胖子罐都可能是微服务,然后可以独立升级,替换或扩展。 每个胖子罐通常将遵循单一责任原则,因此将仅打包所需的依赖项。 每个JAR都可以使用多语言持久性,并且仅使用所需的持久性机制。

给我看看代码!

通过添加Maven依赖项和插件,可以将Java EE应用程序打包为WildFly Swarm胖子罐。 github.com/arun-gupta/wildfly-samples/tree/master/swarm上提供了一个简单的JAX-RS示例的完整源代码。

WildFly Swarm Maven依赖关系

pom.xml添加以下Maven依赖项:

<dependency><groupId>org.wildfly.swarm</groupId><artifactId>wildfly-swarm-jaxrs</artifactId><version>${version.wildfly-swarm}</version><scope>provided</scope>
</dependency>

WildFly Swarm Maven插件

pom.xml添加以下Maven插件:

<plugin><groupId>org.wildfly.swarm</groupId><artifactId>wildfly-swarm-plugin</artifactId><version>${version.wildfly-swarm}</version><executions><execution><phase>package</phase><goals><goal>create</goal></goals></execution></executions>
</plugin>

创建WildFly Swarm胖子罐

通过调用标准Maven目标,可以轻松创建胖子罐:

maven package

这将使用通常的Maven约定生成一个JAR文件,并在末尾附加-swarm 。 在我们的示例中生成的WAR文件名是swarm-1.0-SNAPSHOT-swarm.jar

生成的WAR文件约为30MB,具有134个JAR(全部位于m2repo目录中)和211个类。 应用程序代码捆绑在app/swarm-1.0-SNAPSHOT.war

运行WildFly Swarm胖子罐

此jar可以运行为:

swarm> java -jar target/swarm-1.0-SNAPSHOT-swarm.jar 
12:27:10,622 INFO  [org.jboss.msc] (main) JBoss MSC version 1.2.4.Final
12:27:10,739 INFO  [org.jboss.as] (MSC service thread 1-6) WFLYSRV0049: WildFly Core 1.0.0.CR1 "Kenny" starting
2015-05-06 12:27:11,185 INFO  [org.jboss.as.security] (ServerService Thread Pool -- 11) WFLYSEC0002: Activating Security Subsystem
2015-05-06 12:27:11,189 INFO  [org.jboss.as.security] (MSC service thread 1-10) WFLYSEC0001: Current PicketBox version=4.9.0.Beta2
2015-05-06 12:27:11,194 INFO  [org.wildfly.extension.io] (ServerService Thread Pool -- 13) WFLYIO001: Worker 'default' has auto-configured to 16 core threads with 128 task threads based on your 8 available processors
2015-05-06 12:27:11,199 INFO  [org.jboss.as.naming] (ServerService Thread Pool -- 12) WFLYNAM0001: Activating Naming Subsystem
2015-05-06 12:27:11,246 INFO  [org.jboss.as.naming] (MSC service thread 1-12) WFLYNAM0003: Starting Naming Service
2015-05-06 12:27:11,319 INFO  [org.wildfly.extension.undertow] (MSC service thread 1-8) WFLYUT0003: Undertow 1.2.4.Final starting
2015-05-06 12:27:11,319 INFO  [org.wildfly.extension.undertow] (ServerService Thread Pool -- 14) WFLYUT0003: Undertow 1.2.4.Final starting
2015-05-06 12:27:11,337 INFO  [org.xnio] (MSC service thread 1-7) XNIO version 3.3.1.Final
2015-05-06 12:27:11,343 INFO  [org.xnio.nio] (MSC service thread 1-7) XNIO NIO Implementation Version 3.3.1.Final
2015-05-06 12:27:11,369 INFO  [org.wildfly.extension.undertow] (MSC service thread 1-13) WFLYUT0012: Started server default-server.
2015-05-06 12:27:11,409 INFO  [org.wildfly.extension.undertow] (MSC service thread 1-8) WFLYUT0006: Undertow HTTP listener default listening on /127.0.0.1:8080
2015-05-06 12:27:11,543 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0025: WildFly Core 1.0.0.CR1 "Kenny" started in 855ms - Started 64 of 70 services (13 services are lazy, passive or on-demand)
2015-05-06 12:27:11,570 INFO  [org.jboss.as.server.deployment] (MSC service thread 1-3) WFLYSRV0027: Starting deployment of "swarm-1.0-SNAPSHOT.war" (runtime-name: "swarm-1.0-SNAPSHOT.war")
2015-05-06 12:27:11,724 INFO  [org.wildfly.extension.undertow] (MSC service thread 1-1) WFLYUT0018: Host default-host starting
2015-05-06 12:27:11,906 INFO  [org.jboss.resteasy.spi.ResteasyDeployment] (MSC service thread 1-14) Deploying javax.ws.rs.core.Application: class org.wildfly.samples.swarm.MyApplication
2015-05-06 12:27:11,923 INFO  [org.wildfly.extension.undertow] (MSC service thread 1-14) WFLYUT0021: Registered web context: /
2015-05-06 12:27:11,944 INFO  [org.jboss.as.server] (main) WFLYSRV0010: Deployed "swarm-1.0-SNAPSHOT.war" (runtime-name : "swarm-1.0-SNAPSHOT.war")

响应可以验证为:

target> curl -v http://127.0.0.1:8080/resources/resource
* Hostname was NOT found in DNS cache
*   Trying 127.0.0.1...
* Connected to 127.0.0.1 (127.0.0.1) port 8080 (#0)
> GET /resources/resource HTTP/1.1
> User-Agent: curl/7.37.1
> Host: 127.0.0.1:8080
> Accept: */*
> 
< HTTP/1.1 200 OK
< Connection: keep-alive
< Content-Type: application/octet-stream
< Content-Length: 12
< Date: Wed, 06 May 2015 19:29:10 GMT
< 
* Connection #0 to host 127.0.0.1 left intact
hello swarm!

WildFly Swarm Release博客引用了许多有关Servlet的博客, 带有ShrinkWrap的JAX-RS , 通过Deployment的数据源 , Messaging和JAX-RS等等。

WildFly Swarm下一步

该版本仅为1.0.0.Alpha1版本,因此请随意尝试示例并通过提出问题给我们提供反馈。

您拥有所有WildFly子系统的功能,甚至可以创建可嵌入的Java EE容器,如发行博客中所示:

public class Main {public static void main(String[] args) throws Exception {Container container = new Container();container.subsystem(new MessagingFraction().server(new MessagingServer().enableInVmConnector().topic("my-topic").queue("my-queue")));// Start the containercontainer.start();JaxRsDeployment appDeployment = new JaxRsDeployment();appDeployment.addResource(MyResource.class);// Deploy your JAX-RS appcontainer.deploy(appDeployment);// Create an MSC deploymentServiceDeployment deployment = new ServiceDeployment();deployment.addService(new MyService("/jms/topic/my-topic" ) );// Deploy the servicescontainer.deploy( deployment );}
}

随后的博客将展示如何使用WildFly Swarm轻松创建微服务。

WildFly Swarm保持联系

您可以通过WildFly HipChat会议室, Twitter上的@wildflyswarm或GitHub Issues来跟上该项目。

翻译自: https://www.javacodegeeks.com/2015/05/wildfly-swarm-building-microservices-with-java-ee.html

swarm:pending

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/337634.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html中引入js柱状图,Echarts.js 图表在layui中的引用

添加部分源码,可以使layui使用第三方插件的方法引入,代码以下://打开源码,将代码头部的代码(function (global, factory) {typeof exports object && typeof module ! undefined ? factory(exports) :typeof define function && define.amd ? define([expo…

C++ 23将引入标准库模块支持,编译速度提升10倍

点击蓝字关注我们虽然模块是 C 20 的主要卖点&#xff0c;但与 C 20 不同的是&#xff0c;C 23 的标准库也将实现模块化。从标准库开始&#xff0c;模块有望改善编译速度和 C 开发者组织代码的方式。C 是丹麦计算机科学家 Bjarne Stroustrup 创建的编程语言&#xff0c;由 ISO …

python刷题_11.学习Python,刷题才能让你感受到快(差)乐(距)!

猜数字游戏可用一个简单的while循环来实现。 其中 随机数 的生成在第4篇介绍过&#xff0c; 键盘输入在上一篇介绍过 import random result round(random.random()*100) while result ! guess: guess int(input()) if guess>result: print(大了!) elif guess print(小了!)…

java jigsaw_Java 9和Project Jigsaw如何破坏您的代码

java jigsawJava 9迫在眉睫&#xff0c;它将带有完整的Project Jigsaw 。 在我从OpenJFX邮件列表的最近讨论中得知它可能会破坏现有代码之前&#xff0c;我并没有对此给予太多关注。 这对于Java非常不寻常&#xff0c;因此引起了我的兴趣。 我阅读了该项目的JEP和一些相关文章…

C语言的万能“三板斧”

点击蓝字关注我们作为嵌入式工程师&#xff0c;写一个效率高效&#xff0c;思路清晰的C语言程序是我们的终极目标。那么&#xff0c;怎样才能写好这样的程序呢&#xff1f;首先&#xff0c;我们要用C语言的思维方式来进行程序的构架构建&#xff1b;其次&#xff0c;要有良好的…

武汉城市职业学院计算机分数线,武汉城市职业学院历年分数线 2021武汉城市职业学院录取分数线...

一、2019年武汉城市职业学院各省录取分数线及录取位次统计表1、武汉城市职业学院2019年在福建录取分数线如下&#xff1a;文科录取批次高职专科301分&#xff0c;最低录取位次为68896名、理科录取批次高职专科229分,最低录取位次为130149名&#xff1b;2、武汉城市职业学院2019…

aws sqs_在Spring中将AWS SQS用作JMS提供程序

aws sqs最近AWS公布了新的客户端库&#xff0c;它实现了JMS 1.1规范 &#xff0c;并使用他们的简单队列服务 &#xff08;SQS&#xff09;作为JMS提供者 &#xff08;见杰夫巴尔的帖子在这里 &#xff09;。 在我的文章中&#xff0c;我将向您展示如何设置Maven项目以使用Sprin…

openmv串口数据 串口助手_STM32 串口接收不定长数据 STM32 USART空闲检测中断

编者注&#xff1a;单片机串口接收不定长数据时&#xff0c;必须面对的一个问题为&#xff1a;怎么判断这一包数据接收完成了呢&#xff1f;常见的方法主要有以下两种&#xff1a;1.在接收数据时启动一个定时器&#xff0c;在指定时间间隔内没有接收到新数据&#xff0c;认为数…

java 多线程性能_Java中多线程的性能比较

java 多线程性能Java中有多种用于多线程的技术。 可以通过同步关键字&#xff0c;锁或原子变量来并行化Java中的一段代码。 这篇文章将比较使用synced关键字ReentrantLock&#xff0c;getAndIncrement&#xff08;&#xff09;以及执行get&#xff08;&#xff09;和compareAnd…

C语言贪吃蛇小游戏 | 源码

点击蓝字关注我们该程序已经在VS2019上验证过了&#xff0c;可以直接运行。程序目录程序里就只有一个test.cpp文件&#xff0c;也就是说大家可以先创建工程&#xff0c;然后直运行效果C语言学习资源汇总【最新版】源码#include<stdio.h> #include<stdlib.h> #inclu…

东华大学计算机学院讲座单,计信学院成功举办2018级专业导师面对面系列讲座活动...

为帮助大一新生尽快适应大学生活&#xff0c;了解专业&#xff0c;掌握知识&#xff0c;计信学院积极响应学校号召&#xff0c;成立由教授、博士组成的专业导师团队&#xff0c;为各专业开展系列专业知识讲座。自10月17日晚7点至10月26日下午4点&#xff0c;各专业导师面对面系…

python 控制有线网卡_Python 使用指定的网卡发送HTTP请求的实例

需求: 一台机器上有多个网卡, 如何访问指定的 URL 时使用指定的网卡发送数据呢? $ curl --interface eth0 www.baidu.com # curl interface 可以指定网卡 阅读 urllib.py 的源码, 追述到 open_http –> httplib.HTTP –> httplib.HTTP._connection_class HTTPConnectio…

C函数指针别再停留在语法,得上升到软件设计

点击蓝字关注我们经常有朋友问到底如何在C程序中采用面向对象编程?如何让模块之间松耦合&#xff1f;......其实究其原因还是没有把C语言与软件设计很好的联系起来。这里跟大家找了一些内容&#xff0c;相信认真看完全文多多少少会有你想要的答案&#xff1a;正文部分&#xf…

spring默认缓存管理器_使用Spring的缓存管理器缓存Web内容

spring默认缓存管理器在这篇文章中&#xff0c;我想向大家展示如何使用Spring的CacheManager&#xff0c; Cacheable和JMX批注来缓存和管理Web内容的缓存的基础知识。 想象一下一个网上商店&#xff0c;它从远程WCMS&#xff08;Web内容管理系统&#xff09;获取一些内容&#…

计算机软件选修课选什么好,大学值得选的“选修课”,一点不比专业课差,能选上最好认真听...

原标题&#xff1a;大学值得选的“选修课”&#xff0c;一点不比专业课差&#xff0c;能选上最好认真听文/小哈你是怎样对待你的选修课的&#xff1f;以前经常听学长学姐们说过这样一句话&#xff0c;“上大学之后&#xff0c;专业课选逃&#xff0c;选修课必逃”。不知道大家是…

自动化运维 python 批量监控服务器_1、python自动化运维——监测服务器状态

监测服务器状态 获取系统性能信息 1、CPU信息&#xff1a; Linux操作系统的CPU利用的几个部分&#xff1a; User Time;SystemTime;Wait IO;Idle psutil.cpu_times() psutil.cpu_times().user psutil.cpu_count() 2、内存信息 psutil.virtual_memory() #查看内存完整信息 psutil…

计算机应用基础模拟三答案,《计算机应用基础》模拟试卷三答案

计算机应用基础计算机应用基础 模拟试卷三模拟试卷三 答案答案 得分评卷人 一一 填空题填空题 1 HTTP 2 采样频率 3 机械 光电 光学 4 文件夹 5 TCP IP 6 网卡 7 网络地址 8 光纤 9 应用 10 左下角 标签颜色为白色 11 第一步 打开 页面设置 在 页边距 选项卡中选择横向 然后在 …

C/C++程序员的编程修养

点击蓝字关注我们什么是好的C/C程序员&#xff1f;是不是懂得很多技术细节&#xff1f;还是懂底层编程&#xff1f;还是编程速度比较快&#xff1f;我觉得都不是。对于一些技术细节来说和底层的技术&#xff0c;只要看帮助&#xff0c;查资料就能找到&#xff0c;对于速度快&am…

ginkgo spi 错误_开发SPI时不要犯这个错误

ginkgo spi 错误您的大多数代码都是私有的&#xff0c;内部的&#xff0c;专有的&#xff0c;并且永远不会公开。 在这种情况下&#xff0c;您可以放轻松–您可以重构所有错误&#xff0c;包括那些可能导致API更改中断的错误。 但是&#xff0c;如果要维护公共API&#xff0c;…

python账号密码一一对应_python模拟用户登录系统,如何两个用户输入各自的密码才能登入?...

展开全部 #我可以把我自己2113的成果送你&#xff0c;你来研究5261研究 import json #用来存储数据4102的模块 import os #用来进行文件操作1653 import sys #获取脚本所在目录用 import re #用来进行字符串操作 script_path os.path.realpath(__file__) PATH os.path.dirnam…