日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

js中使用camel框架_使用Fabric8在Kubernetes中使用Camel和CDI

發布時間:2023/12/3 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 js中使用camel框架_使用Fabric8在Kubernetes中使用Camel和CDI 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

js中使用camel框架

序幕

我最近在博客上發表了使用CDI注入Kubernetes服務的信息 。 在本文中,我將更進一步,將Apache Camel帶入圖片。 因此,我將使用Camel的CDI支持來連接我的組件和路由,以及Fabric8的CDI擴展來自動將Kubernetes服務注入到我的組件中。

我將重用以前的文章中的內容(如果您還沒有讀過,請仔細閱讀),以構建一個獨立的駱駝cdi應用程序,該應用程序將通過http (向jdbc并返回的簡單http)公開數據庫的內容再次) 。 一切將在Docker中運行,而編排將由Kubernetes完成。

所以第一件事。 駱駝和CDI的工作原理…。

駱駝CDI注冊中心

Apache Camel正在使用注冊表的概念。 它使用注冊表來查找路由所需的對象。 這些查找可以按類型或名稱進行。

注冊表最常見的用途是在處理端點uri時,駱駝將解析該方案,并將按名稱查找注冊表以查找適當的組件。 其他情況涉及按名稱將bean引用傳遞給端點,依此類推……

換句話說, Apache Camel可以在運行時在bean注冊表上執行查找。

任何需要與Apache Camel完美配合的擴展都需要為bean提供可預測的名稱。

@Alias批注

對于任何給定的服務, Fabric8的CDI擴展都可以注冊一個以上的bean (每種服務,每種協議每個協議一個) 。 因此, 不可能有以服務命名的服務bean。 用戶也不必記住內部使用的命名約定。

“那么,Fabric8如何與依賴“按名稱”查找的框架一起玩呢?”

Fabric8提供@ Alias批注,該批注允許開發人員顯式指定注入服務的Bean名稱。 這是一個例子:

import javax.inject.Inject; import io.fabric8.annotations.Protocol; import io.fabric8.annotations.ServiceName;public class MysqlExampleWithAlias {public MysqlExampleWithAlias(@Inject @Alias("mysqldb") @ServiceName("mysql") String serivceUrl) {System.out.println("Bean Name: mysqldb. Type: String. Value:"+serviceUrl);} }

“這會發生什么?”

Fabric8 cdi擴展將收到一個事件,該事件存在類型為String的注入點,帶有2個限定符:

  • ServiceName的值為“ mysql ”。
  • 值為“ mysqldb ”的別名 。
  • 因此,當它為該服務創建bean和生產者時,將使用“ mysqldb”作為名稱。 這就是控制Fabric8托管bean并使名稱查找成為可能的原因。

    使用@Factory創建或配置Camel組件或端點

    在上一篇文章中,我介紹了一些示例,說明如何使用Fabric8的@ Factory批注創建jdbc連接。 現在,我將為jdbc數據源創建一個工廠,然后將其添加到Apache Camel Cdi Bean Registry中 。

    import com.mysql.jdbc.jdbc2.optional.MysqlDataSource; import io.fabric8.annotations.Configuration; import io.fabric8.annotations.Factory; import io.fabric8.annotations.ServiceName;import javax.sql.DataSource;public class DatasourceFactory {private static final String TCP_PROTO = "tcp";private static final String JDBC_PROTO = "jdbc:mysql";@Factory@ServiceNamepublic DataSource create(@ServiceName String url, @Configuration MysqlConfiguration conf) {MysqlDataSource ds = new MysqlDataSource();ds.setURL(url.replaceFirst(TCP_PROTO, JDBC_PROTO) + "/" + conf.getDatabaseName());ds.setUser(conf.getUsername());ds.setPassword(conf.getPassword());return ds;}

    現在,如果我們想從Apache Camel端點引用此數據源,則必須將數據源的“ 名稱 ”指定給端點uri。 例如“ jdbc:custmersds ”,其中customersds是數據源的名稱。

    “但是,如何命名fabric8托管數據源?”

    這就是@Alias節省一天的方式:

    import io.fabric8.annotations.Alias; import io.fabric8.annotations.ServiceName; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.cdi.ContextName; import org.apache.camel.model.language.ConstantExpression;import javax.ejb.Startup; import javax.enterprise.context.ApplicationScoped; import javax.inject.Inject; import javax.sql.DataSource;@ContextName("myCdiCamelContext") @Startup @ApplicationScoped public class MyRoutes extends RouteBuilder {@Inject@ServiceName("mysql-service")@Alias("customerds")DataSource dataSource;@Overridepublic void configure() throws Exception {from("jetty:http://0.0.0.0:8080/list/").setBody(new ConstantExpression("select * from customers")).to("jdbc:customerds");} }

    這是基于CDI的Camel應用程序的典型RouteBuilder。 它的特殊之處在于我們注入了一個名為“ customersds”的數據源。

    “誰提供數據源?”

    簡短的答案 : Fabric8 。

    答案不是那么簡短 : @ ServiceName (“ mysql”)注釋告訴Fabric8數據源引用了“ mysql” Kubernetes服務。 Fabric8將為我們獲取該服務的URL。 由于字段的類型不是字符串,也不是URL,而是數據源,因此Fabric8將查找能夠將字符串轉換為數據源的@ Factory方法。 在我們的例子中,它將找到確實做到這一點的DataSourceFactory類。 由于這還不夠出色 ,因此DataSourceFactory還接受@ Configuration MysqlConfiguration ,以便我們可以指定數據庫名稱,憑據等內容(請參閱我的上一篇文章)。

    配置數據源

    在開始解釋如何配置數據源之前,讓我退后一步,回顧一下我以前的文章中的MysqlConfiguration :

    import org.apache.deltaspike.core.api.config.ConfigProperty; import javax.inject.Inject;public class MysqlConfiguration {@Inject@ConfigProperty(name = "USERNAME", defaultValue = "admin")private String username;@Inject@ConfigProperty(name = "PASSWORD", defaultValue = "admin")private String password;@Inject@ConfigProperty(name = "DATABASE_NAME", defaultValue = "mydb")private String databaseName;public String getUsername() {return username;}public String getPassword() {return password;}public String getDatabaseName() {return databaseName;}}

    正如我在上一篇文章中提到的,我們可以使用環境變量來將配置傳遞給我們的應用程序。 請記住,此應用程序旨在存放在Docker容器中……。

    MysqlConfiguration包含3個字段:

  • 環境變量USERNAME的字段用戶名
  • 環境變量PASSWORD的字段密碼
  • 環境變量DATABASE_NAME的字段databseName
  • 因此,我們需要3個環境變量,每個字段一個。 然后,我們的DataSourceFactory將傳遞一個的實例
    可以從環境中檢索具有任何值的MysqlConfiguration ,以便它創建實際的DataSource。

    “但是如何重用MysqlConfiguration來配置多個不同的服務?”

    因此,想法是@ Factory和@ Configuration是可重用的。 畢竟不需要將工廠和模型類綁定到基礎服務,對嗎?

    Fabric8通過使用服務名稱作為環境變量的前綴來提供幫助。 它在運行時執行此操作,并且工作方式如下:

  • Fabric8擴展發現帶有@ ServiceName注釋的注入點
  • 它將檢查目標類型,并在需要時查找@ Factory 。
  • @ Factory接受服務URL和實例MysqlConfiguration
  • MysqlConfiguration將使用@ ServiceName的值作為環境變量前綴來實例化。
  • 因此,為了使我們的示例正常工作,我們需要將應用程序打包為Docker容器,然后使用以下Kubernetes配置:

    { "image": "camel-cdi-jdbc","imagePullPolicy": "IfNotPresent","name": "camel-cdi-jdbc","env": [{"name": "MYSQL_SERVICE_USERNAME","value": "admin"},{"name": "MYSQL_SERVICE_PASSWORD","value": "password"},{"name": "MYSQL_SERVICE_DATABASE_NAME","value": "customers"}]}

    現在,如果我們需要在同一容器內創建一個額外的數據源(例如,從jdbc到jdbc的橋),則只需為其他Kubernetes指定其他環境變量即可 。 現在,如果服務的名稱是“ mysql-target”,那么我們的Kubernetes配置將看起來像:

    { "image": "camel-cdi-jdbc","imagePullPolicy": "IfNotPresent","name": "camel-cdi-jdbc","env": [{"name": "MYSQL_SERVICE_USERNAME","value": "admin"},{"name": "MYSQL_SERVICE_PASSWORD","value": "password"},{"name": "MYSQL_SERVICE_DATABASE_NAME","value": "customers"},{"name": "MYSQL_TARGET_USERNAME","value": "targetUser"},{"name": "MYSQL_TARGET_PASSWORD","value": "targetPassword"},{"name": "MYSQL_TARGET_DATABASE_NAME","value": "targetCustomers"}]}

    …我們可以通過在項目中添加帶有限定符@ ServiceName (“ mysql-target”)的注入點來使用它。

    您可以在Fabric8快速入門中找到類似的示例。 更具體地說,就是camel-cdi-amq快速入門 。

    敬請關注

    我希望你喜歡它。 不久將有更多相關主題(包括為在Kubernetes上運行的Java應用程序編寫集成測試)。

    翻譯自: https://www.javacodegeeks.com/2015/06/using-camel-cdi-inside-kubernetes-with-fabric8.html

    js中使用camel框架

    總結

    以上是生活随笔為你收集整理的js中使用camel框架_使用Fabric8在Kubernetes中使用Camel和CDI的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。