我最近一直在阅读有关消息传递系统的内容,并专门研究了RabbitMQ和NServiceBus.正如我所理解的那样,如果某条消息由于某种原因而失败,则会再次尝试一次.然后,两个系统都提供了稍后再试的可能性,例如在5秒内.当五秒钟过去后,消息将再次发送多次.
我引用Vaughn Vernon 实现域驱动设计(p.502):
处理此问题的另一种方法是简单地重试发送直到成功,可能使用上限指数退避.在RabbitMQ的情况下,重试可能会失败很长一段时间.因此,使用消息NAK和重试的组合可能是最好的方法.尽管如此,如果我们的流程每五分钟重试三次,那么它可能就是我们所需要的.
对于NServiceBus,这称为二级重试,当重试发生时,它会多次发生.
为什么需要多次发生?为什么不每五分钟重试一次?五分钟后第一次重试失败的可能性是多少,第二次重试(可能是几毫秒后)应该成功的几率是多少?
如果它不需要由于某些配置(是吗?),为什么我发现的所有示例都有多次重试?
我拥有Xamarin 的Indie许可证,因此我可以用我最熟练的编程语言C#开发iPhone/iPad应用程序.有了这个许可证,我无法使用Visual StudioXamarin 的插件.我还是喜欢Visual Studio到Xamarin Studio,所以我仍然在开发Visual Studio任何代码不需要MonoTouch引用,然后只需手动将DLL复制到Xamarin Studio.
我有一个程序集.Net framework 4.5,当我尝试调试我的应用程序时收到以下错误消息:
加载程序集:/Users/EdGriMac/Dropbox/Quiz/Newtonsoft.Json.dll [外部] 2013-09-23 20:30:38.021 Exam936 [2228:c07]无法加载'Newtonsoft.Json'进行注册:System.Reflection .ReflectionTypeLoadException:无法加载模块中的类.at(包装器托管到本机)System.Reflection.Assembly:GetTypes(System.Reflection.Assembly,bool)在/ Developer/MonoTouch/Source/mono/mcs /中的System.Reflection.Assembly.GetTypes()[0x00000]在/Developer/MonoTouch/Source/monotouch/src/ObjCRuntime/OldDynamicRegistrar.cs中的MonoTouch.Registrar.OldDynamicRegistrar.RegisterAssembly(System.Reflection.Assembly a)[0x00000]中的class/corlib/System.Reflection/Assembly.cs:351: 67 2013-09-23 20:30:38.023 Exam936 [2228:c07]这可能是由于模拟器保留了过时的装配,位置:
我的尝试:
首先想到的是NewtonSoft.JsonMonoTouch无法使用,但我不知道如何找到它.有没有办法确定是否可以使用第三方dll?
我的第二个想法是,NewtonSoft.Json另一个组件可以使用较旧或较新版本.然而,这不是一个大型项目,我使用的唯一其他程序集Json是RestSharp,但我认为不会使用NewtonSoft.Json.我查看了网页上的GitHub页面,但无法找到参考.
我google了一下,发现这篇文章说(有点下)MonoTouch.Registrar.OldDynamicRegistrar.RegisterAssembly表示(引用:) I can't build the app using the build flags --registrar:olddynamic. If I remove that, it now works, I can now link and …
该ListView在Xamarin.Forms有一个RowHeight特性,但似乎无论什么高度我将它设置为.
我使用Visual Studio 2013,我有Xamarin的商业版许可证,我使用Android模拟器MonoForAndroid_API_15,我相信我有所涉及的所有内容的最新版本.至今我无法运行iOS或WinPhone模拟器,所以我无法比较.这只是Android模拟器的一个问题,还是设置RowHeight属性不正确?
这是我继承的ContentPage(注意我设置RowHeight):
public class QuizzesPage : ContentPage
{
private readonly ListView _listView;
public QuizzesPage()
{
Title = "Test";
NavigationPage.SetHasNavigationBar(this, true);
_listView = new ListView {RowHeight = 20};
Content = _listView;
}
protected async override void OnAppearing()
{
base.OnAppearing();
_listView.ItemsSource = new[] {"One", "Two", "Three", "Four", "Five"};
}
}
Run Code Online (Sandbox Code Playgroud)
在App:
public class App
{
public static Page GetMainPage()
{
return new NavigationPage(new QuizzesPage());
} …Run Code Online (Sandbox Code Playgroud) 如果我请RunSynchronously()一个Task在C#中,这会导致异步调用进一步下跌的兔子洞被同步运行呢?
假设我有一个名为的方法UpdateAsync().在这个方法内部进行了另一次异步调用DoSomethingAsync(),我们再次发现DoSomethingElseAsync(),调用RunSynchronously()'UpdateAsync()'导致RunSynchronously()也间接被调用DoSomethingAsync()?
我的问题的原因:
我有一种情况,我"需要" UpdateAsync()在catch-block中调用异步方法(),并想知道调用它RunSynchronously()是否安全.文档非常清楚,你不能await在catch-block中.(严格来说,我可以在catch-block中使用boolean 并UpdateAsync()在try-catch之后调用,但感觉相当脏).对于双重问题感到抱歉,但是你可能已经理解我不太清楚如何用它来表达它并且对这个领域没有很好的理解.
(编辑: 我不知道如何找出一个方法是否异步调用.你会如何为此编写一个单元测试?是否可以以某种方式记录它?)
这是我在工作时经历过几次的事情的一个例子MonoTouch:
我在互联网上找到了一个代码示例,给出了如何使用NSUrl该类的示例.我尝试将其添加到我的代码中Xamarin Studio.这很简单,除了我找不到using要使用的语句.我尝试谷歌,但没有找到的例子包括using我正在寻找的难以捉摸的声明.我找到了官方Mac开发者库NSUrl的描述,但它并没有告诉我太多(或者它告诉我太多).
一般来说,如何using在这样的情况下找到要使用的语句?有Xamarin没有我无法找到的文件?我不是在寻找示例中的特定命名空间,而是如何自己查找它.
今天(2016 年 11 月 11 日)我下载了新的 Visual Studio 2017 RC,安装了 .Net Core 1.1 并设置了一个 Web Api 项目(ASP.NET Core Web 应用程序(.NET Core))。然后我按照有关如何从配置文件读取应用程序设置的说明进行操作。这工作得很好。
然后我在同一个解决方案中创建了一个新项目。这是.NET Core部分下的类库 (.NET Standard)。我添加了一个带有接口的类,并使用默认的依赖注入进行了设置。
最后,我尝试通过构造函数注入使用类库中的配置。我收到此错误消息:
找不到类型或命名空间名称“IOptions<>”
这是我在类库中的类:
public class Firebase : IDatabase
{
public Firebase(IOptions<AppSettings> appSettings)
{
//string basePath =
}
}
Run Code Online (Sandbox Code Playgroud)
下面是 Startup.cs 中的 ConfigureServices 方法:
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc();
services.AddTransient<IDatabase, Firebase>();
// Set up configuration files.
services.AddOptions();
services.Configure<AppSettings>(options => Configuration.GetSection("AppSettings").Bind(options)); …Run Code Online (Sandbox Code Playgroud) xamarin.ios ×2
.net-4.0 ×1
.net-core ×1
async-await ×1
asynchronous ×1
c# ×1
ios ×1
messaging ×1
nservicebus ×1
rabbitmq ×1
xamarin ×1