以上就是给各位分享我可以在其他捆绑软件发布的Blueprint服务之前注入代理吗?,同时本文还将给你拓展android–我可以在其他类中创建活动的对象吗?、Blazor+Dapr+K8s微服务之事件发
以上就是给各位分享我可以在其他捆绑软件发布的Blueprint服务之前注入代理吗?,同时本文还将给你拓展android – 我可以在其他类中创建活动的对象吗?、Blazor+Dapr+K8s微服务之事件发布订阅、blueprint-css – 如何使用BlueprintCSS将div居中?、blueprint-osgi – 如何导入osgi blueprint xml等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:- 我可以在其他捆绑软件发布的Blueprint服务之前注入代理吗?
- android – 我可以在其他类中创建活动的对象吗?
- Blazor+Dapr+K8s微服务之事件发布订阅
- blueprint-css – 如何使用BlueprintCSS将div居中?
- blueprint-osgi – 如何导入osgi blueprint xml
我可以在其他捆绑软件发布的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 – 我可以在其他类中创建活动的对象吗?
我已经在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微服务之事件发布订阅
我们要实现的是:在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居中?
<body> <div> ... other stuff ... <div>center me</div> </div> </body>
解决方法
<div>contents</div>
blueprint-osgi – 如何导入osgi blueprint 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文件中这样做的方法?
但是,如果文件位于同一个Osgi包中,则它们位于相同的上下文中,可以从其他蓝图文件中使用.
另请参见:http://fusesource.com/forums/message.jspa?messageID=15091#15091
今天的关于我可以在其他捆绑软件发布的Blueprint服务之前注入代理吗?的分享已经结束,谢谢您的关注,如果想了解更多关于android – 我可以在其他类中创建活动的对象吗?、Blazor+Dapr+K8s微服务之事件发布订阅、blueprint-css – 如何使用BlueprintCSS将div居中?、blueprint-osgi – 如何导入osgi blueprint xml的相关知识,请在本站进行查询。
本文标签: