GVKun编程网logo

我可以在其他捆绑软件发布的Blueprint服务之前注入代理吗?

22

以上就是给各位分享我可以在其他捆绑软件发布的Blueprint服务之前注入代理吗?,同时本文还将给你拓展android–我可以在其他类中创建活动的对象吗?、Blazor+Dapr+K8s微服务之事件发

以上就是给各位分享我可以在其他捆绑软件发布的Blueprint服务之前注入代理吗?,同时本文还将给你拓展android – 我可以在其他类中创建活动的对象吗?、Blazor+Dapr+K8s微服务之事件发布订阅、blueprint-css – 如何使用BlueprintCSS将div居中?、blueprint-osgi – 如何导入osgi blueprint xml等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

我可以在其他捆绑软件发布的Blueprint服务之前注入代理吗?

我可以在其他捆绑软件发布的Blueprint服务之前注入代理吗?

我们正在使用Karaf和许多OSGI Blueprint services实现一个系统。

是否可以制作一种"BundleListener"类型的捆绑包,当其存在于OSGI容器中时,Blueprintservices用代理来装饰我们的捆绑包,以便引用这些服务的捆绑包将改为调用代理?

(我想这可以通过以某种方式在Service
Registry中已经存在的服务之前添加代理来实现,也可以通过更改由引用包获得的引用来实现ServiceTracker.addingService

答案1

小编典典

进行这些黑客攻击的标准方法是使用OSGi核心框架中的服务挂钩。挂钩允许您从一个或多个捆绑包的视图中删除服务。然后,您可以注册另一个服务来替代第一个服务,并且该服务不会从捆绑软件的视图中删除。

现有:

  +----------+              +----------+  | register |------<|------| using    |  +----------+              +----------+

代理的

  +----------+         hide +----------+  | register |------<|-+--X-| using    |---|>---+ proxied  +----------+         |    +----------+        |                       |                        |                       |    +----------+        |                       +----|  manager |--------+                            +----------+

尽管乍一看有些奇怪,但这种“从视图中删除”功能使您可以详细控制捆绑包所提供的服务,同时将总体复杂性降至最低。请参阅OSGi 5.0.0
Core中的第55章。第55.3.1节详细介绍了此代理。

<soapbox>

我称这些事情为骇客,因为这种方式的代理具有不良的运行时时间排序质量。如果您的经理捆绑包(用于隐藏和创建代理的捆绑包)的启动晚于使用该服务的捆绑包,则您会遇到麻烦,因为使用捆绑包暂时会暴露于非代理服务。

尽管有一些方法可以解决您开始订购此问题的方法,但是由于您现在具有未声明的(订购)依赖性,因此它们基本上都很烂。因此,最好确保使用代理的捆绑包具有特殊的依赖性,例如另一种服务类型或特殊的服务属性。由于依存关系是显式的,因此您不必再担心排序,时间依存关系已成为一个普通的服务依存关系问题,DS和OSGi中的其他服务管理器可以很好地解决此问题。

使用属性/其他类型代理

  +----------+              +----------+    proxied=true  | register |              | using    |---|>---+   +----------+              +----------+        |        |                                       |        |                   +----------+        |        +-----------<|------|  manager |--------+                            +----------+

您显然不想修改注册该服务的捆绑包或使用该服务的捆绑包,因为这将杀死可重用方面的整个想法。注册/使用捆绑软件的程序员应该很高兴不知道经理的方案。那么,如何在使用包中设置过滤器?

如果您使用声明式服务(DS),那么您很幸运!使用DS,您可以通过Configuration
Admin使用“目标”对服务参考设置过滤器。配置属性。因此,管理器捆绑包看到要代理的服务,它注册了具有特殊属性的第二个服务(例如’proxied =
true’)。然后,使用包通过Configuration Admin DS’目标引用属性(例如’(proxied = *)’)设置了过滤器。

</soapbox>

android – 我可以在其他类中创建活动的对象吗?

android – 我可以在其他类中创建活动的对象吗?

我已经在mainactivity中定义了一个函数,现在我想用我的app中的另一个类访问.我已经通过使用我调用了该函数的对象创建了一个mainactivity的对象.它没有显示任何错误,但它不是每次都执行尝试执行应用程序崩溃?
任何解决方案

解决方法:

活动A应该有一个变量

static ActivityA activityA;

在onCreate状态:

activityA = this;

并添加此方法:

public static ActivityA getInstance(){
   return   activityA;
 }

在活动B中,致电

ActivityA.getInstance().myFunction(); //call myFunction using activityA

Blazor+Dapr+K8s微服务之事件发布订阅

Blazor+Dapr+K8s微服务之事件发布订阅

我们要实现的是:在blazorweb服务中发布一个事件,并传递事件参数,然后在serviceapi1服务中订阅该事件,接收到blazorweb服务中发布的事件和参数。

1         在blazorweb服务中发布一个事件

在DaprTest1.Server项目的WeatherForecastController.cs文件中增加事件发布API:

  [HttpPost(nameof(PublishTestEvent))]
        public async Task PublishTestEvent(TestEventModel eventModel)
        {
            await _daprClient.PublishEventAsync<TestEventModel>("pubsub", "TestEventName", eventModel);
        }

"TestEventModel"是自定义的事件消息类,"TestEventName"是事件的名称,"pubsub" 是事件发布订阅的名称,定义在“pubsub.yaml” 组件中:

apiVersion: dapr.io/v1alpha1
kind: Component
Metadata:
  name: pubsub
spec:
  type: pubsub.redis
  version: v1
  Metadata:
  - name: redisHost
    value: localhost:6379
  - name: redisPassword
    value: ""

这个组件中定义的发布订阅采用了Redis 的 Stream 特性,要注意旧版本的Redis是否支持Stream。

2         在serviceapi1服务中订阅该事件

在DaprTest1.ServiceApi1项目中添加Dapr.AspNetCore包,该包实现了ASP.NET Core与Dapr的集成,例如依赖注入DaprClient对象,将事件订阅发布功能直接集成到 ASP.NET Core 模型绑定功能中等。

 

在DaprTest1.ServiceApi1项目的Startup.cs 文件增加事件订阅相关代码(注意绿色部分):

public void ConfigureServices(IServiceCollection services)
        {

            services.AddControllers().AddDapr();
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo { Title = "DaprTest1.ServiceApi1", Version = "v1" });
            });
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseSwagger();
                app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "DaprTest1.ServiceApi1 v1"));
            }

            app.UseRouting();

            app.UseAuthorization();

            app.Usecloudevents();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapSubscribeHandler();
                endpoints.MapControllers();
            });
        }

在DaprTest1.ServiceApi1项目的WeatherForecastController文件增加事件订阅API

  [Topic("pubsub", "TestEventName")]
        [HttpPost(nameof(SubscribleTestEvent))]
        public async Task SubscribleTestEvent(TestEventModel eventModel)
        {
             await Task.CompletedTask;
        }

[Topic("pubsub", "TestEventName")] 订阅了"pubsub"订阅名称的TestEventName事件。

3         在Blazor项目中增加Blazor前端事件发布菜单和页面

@page "/pubsub"
@using DaprTest1.Shared
@using System.Text.Json
@inject HttpClient Http

<h1>发布订阅</h1>

<p>This component demonstrates publish and subscrible event.</p>

<p>编码:<input type="text" @bind="eventModel.Code" />, 数量:<input type="text" @bind="eventModel.Amount" /></p>

<button@onclick="PublishEvent">发布事件</button>



@code {
    private TestEventModel eventModel = new TestEventModel();
    private async Task PublishEvent() => await Http.PostAsJsonAsync<TestEventModel>("WeatherForecast/PublishTestEvent", eventModel);

}

 

4         事件发布订阅测试

和上一节一样,我们先开启每个微服务的SideCar,注意,因为的SideCar 指定了状态存储的Redis,所以我们先要开启Redis,不然SideCar会启动失败。确保每个微服务的SideCar都是运行状态。

 

然后启动两个微服务,并访问http://localhost:5000

 

在ServiceApi1服务的事件接收处设置好断点,然后点击“发布事件”按钮

 

可以看到,我们成功接收到了TestEventName事件和事件发布的参数。

5         将Dapr的发布订阅组件修改为RabbitMQ

通常情况下,我们会用RabbitMQ来支持事件的发布和订阅,我们将Dapr 发布订阅组件“pubsub.yaml”,修改为如下内容即可:

apiVersion: dapr.io/v1alpha1
kind: Component
Metadata:
  name: pubsub
spec:
  type: pubsub.rabbitmq
  version: v1
  Metadata:
  - name: host
    value: "amqp://admin:******@localhost:5672"
  - name: durable
    value: true

 

相关代码:iamxiaozhuang/dapr-test (github.com)

blueprint-css – 如何使用BlueprintCSS将div居中?

blueprint-css – 如何使用BlueprintCSS将div居中?

所以我在容器类中有div.如何使div居中,以便根据div的宽度正确地向两侧添加空白空间?

<body>
  <div>
    ... other stuff ...
    <div>center me</div>
  </div>
</body>

解决方法

你可以这样做:

<div>contents</div>

blueprint-osgi – 如何导入osgi blueprint xml

blueprint-osgi – 如何导入osgi blueprint xml

我正在尝试将Osgi蓝图 XML文件导入到另一个Osgi蓝图 XML文件中.

例如.:
blueprint1.xml:

<?xml version="1.0" encoding="UTF-8"?>
<blueprint ....>
    <bean id="myBean1"/>
    <bean id="myBean2"/>
</blueprint>
</xml>

blueprint2.xml:

<?xml version="1.0" encoding="UTF-8"?>
<blueprint ....>
    <!-- DOES NOT WORK -->
    <import resource="blueprint1.xml" />
</blueprint>

< import>适用于春季,但不适用于蓝图.

有没有人知道在Osgi蓝图XML文件中这样做的方法?

显然,Spring目前无法进行蓝图.

但是,如果文件位于同一个Osgi包中,则它们位于相同的上下文中,可以从其他蓝图文件中使用.

另请参见:http://fusesource.com/forums/message.jspa?messageID=15091#15091

今天的关于我可以在其他捆绑软件发布的Blueprint服务之前注入代理吗?的分享已经结束,谢谢您的关注,如果想了解更多关于android – 我可以在其他类中创建活动的对象吗?、Blazor+Dapr+K8s微服务之事件发布订阅、blueprint-css – 如何使用BlueprintCSS将div居中?、blueprint-osgi – 如何导入osgi blueprint xml的相关知识,请在本站进行查询。

本文标签: